LINUX.ORG.RU

Да, для ввода пароля, чтобы не варганить перенаправление туда-сюда, проще воткнуть на главную iframe с https-мордой формы аутентификации. Сервер по https получает пару логин-пароль, проверяет по БД, генерирует ключ, сохраняет его в БД и отдает клиенту. Все.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Martin256

В языках/фреймворках, на которых пишут веб, есть стандартные средства для этого. По идее, гуглятся на раз.

heilkitty ★★
()

OpenID - технология будущего же. Сотни логинов и паролей, для каждого сайта, которые нужно запоминать или вечно восстанавливать - не нужны.

amomymous ★★★
()
Ответ на: комментарий от reprimand

сейчас использую только PHP, использовать что то еще смысла не вижу, хочу PHP освоить... хотя бы чуть чуть

Martin256 ★★
() автор топика
Ответ на: комментарий от reprimand

Ну, не знаю... Я когда-то свой костыль делал. Сейчас бы сделал иначе: во-первых, упростил бы, а во-вторых, вместо дурацких кук ввел бы local storage.

Eddy_Em ☆☆☆☆☆
()

Вот так: http://username:password@hostname/ ))

Ну короче чего, вот есть у тебя база данных, там есть таблица users, там есть поля id,user_name,pass_hash. Id — автоинкрементное поле, user_name — имя пользователя берётся во время регистрации, pass_hash — md5 хэш от пароля, указанного при регистрации.

В этой таблице обычно с id 0 идёт админ, с id 1 допустим anonymous.(т.е. первые две записи сразу создаёшь сам).

Будем хранить инфу о логине в $_SESSION.

Теперь процедура логина: Функция возвращает true если пользователь уже залогинился и false, если нет.

function islogined()
{
    return (isset( $_SESSION[ 'logined' ] ) && $_SESSION['logined'] == true);
}

Теперь функция, с помощью которой будем пытаться логиниться: //с ламерским mysql_*

function try_to_login( )
{
//Функция может быть пущена либо без аргументов для логина уже залогиненого пользователя,
//т.е. каждый раз вначале скрипта, нужно её запускать.
//либо с парой логин/пароль чтобы влогинить пользователя, когда он ввёл данные и нажал кнопку login.

  if (islogined() == true) {
    return true;
  }

  //пользователь по умолчанию считается аноном
  $_SESSION['login'] = 'anonymous';
  $_SESSION['user_id'] = 1;

  global $dbconnection; //это типа инфа для подключения к базе данных

  $num_arg = func_num_args();
  $login = '';
  $passhash = '';
  if ( $num_arg == 0 ) {
    // функция запущена без аргументов, проверяем, может пользователь уже логинился недавно
    if( isset($_COOKIE['login']) && isset($_COOKIE['passhash'] ) )
      {// сначала проверим в куках
        $login = $_COOKIE[ 'login' ];
        $passhash = $_COOKIE[ 'passhash' ];
      }
    elseif (isset($_SESSION['login']) && isset($_SESSION['passhash'] ))
      {//но куки не всегда разрешены
        $login = $_SESSION[ 'login' ];
        $passhash = $_SESSION[ 'passhash' ];
      }
    else
      {
        return false;
      }
  } // Функция запущена с двумя аргументами с логином и паролем
  elseif ( $num_arg == 2 )
    {
      $login = func_get_arg(0);
      $passhash =  md5(func_get_arg(1));
    }
  else
    {
      return false;
    }

  $l = mysql_real_escape_string($login);
  $p = mysql_real_escape_string($passhash);

  $loginquery = "SELECT `id` FROM `users` WHERE `user_name`='{$l}' AND `pass_hash`='{$p}' LIMIT 1";
  $sql = mysql_query( $loginquery, $dbconnection ) or die( mysql_error($dbconnection) );

  if( mysql_num_rows($sql) == 1 )
    {
      $user = mysql_fetch_assoc($sql);
      $_SESSION[ 'user_id' ] = $user[ 'id' ];
      $_SESSION[ 'login' ] = $l;
      $_SESSION[ 'passhash' ] = $p;
      setCookie( 'login', $l, strtotime('+1 week'), '/');
      setCookie( 'passhash', $p,  strtotime('+1 week'), '/');
      $_SESSION['logined'] = true;
      return true;
    }

  return false;
  
}

ну и функция вылогинивания:

function logout(){
    session_unset();
    setCookie('login', '', time() - 3600, '/');
    setCookie('passhash', '', time() - 3600, '/');
    
    Redirect("$_SERVER[HTTP_REFERER]");exit;
}

Теперь есть скрипт в котором if (!islogined()) { print_login_form(); } else { print_greetings(); } Теперь где-то есть форма, в которой 2 поля с name='login' и name='password' и action = /login.php type='post' и input button type='submit'

И в этом login.php вызываешь функцию try_to_login($_POST['login'], $_POST['password']); header(«Location: $_SERVER[HTTP_REFERER]»); exit;

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 2)

При регистрации кладёшь в БД логины и хэши паролей с солью. При авторизации сравниваешь.

CYB3R ★★★★★
()
Ответ на: комментарий от ogiel

Если бы можно было с ЛОРоаккаунтом авторизоваться на разных сайтах, было бы удобно. А так не нужно.

CYB3R ★★★★★
()

Самое правильное из замеченного - u2f

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.