Печенье PHP - PullRequest
       29

Печенье PHP

4 голосов
/ 07 февраля 2009

Как бы я "встроил" автологин в этот скрипт?

if (isset($_POST['login'])) {
$query = mysql_query("
          SELECT * FROM users 
          WHERE user_name = '".mysql_real_escape_string($_POST['username'])."' 
      AND user_password = '".mysql_real_escape_string($_POST['password'])."'
");

/* wrong login information? terminate the script */
if (!mysql_num_rows($query)){
header("Location: ./");
exit();
}

/* set session with unique index */
$_SESSION['id'] = mysql_result($query, 0, 'user_id');
mysql_query("UPDATE users SET user_online = '1' WHERE user_id = '{$_SESSION['id']}'");
header("Location: ./");
exit;
}

Ответы [ 3 ]

7 голосов
/ 07 февраля 2009

Сначала несколько предложений:

  1. Вы должны хранить пароли как соленые хэши , а не как открытый текст.
  2. Возможно, вы захотите изменить способ аутентификации в целом. Возможно, было бы неплохо выбрать пароль (в любом случае не делайте «Выбрать *») и сравнить его с соленым хешем пароля, введенного пользователем.

Теперь вы спрашиваете, если я правильно понимаю, как сохранить пользователя вошедшим в систему. Основная идея заключается в том, что вам нужно хранить cookie с чем-то, что однозначно идентифицирует пользователя (но убедитесь, что это не то, что быть легко взломанным - так что сделайте его действительно длинной строкой, например, хэш SHA1 или что-то в этом роде.) Установите дату истечения срока действия куки, чтобы держать пользователя вошедшим в систему.

Вот функция, которую вы используете для установки файлов cookie в PHP.

Затем, когда вы загружаете страницу, вы можете проверить, существует ли этот файл cookie. Если файл cookie существует, а у пользователя нет переменной SESSION, вы можете назначить ему одну.

1 голос
/ 28 октября 2018

Предложение:

Используйте встроенные функции PHP password_hash и password_verify . Хранить пароли в виде простого текста небезопасно.

И чтобы проверить, вошел ли пользователь уже в систему:

Проверьте, например, что переменная $_SESSION['username'] уже существует, да ?: перейти на страницу индекса, нет ?: просто продолжить сценарий.

Пример:

if (isset($_SESSION['username'])) {
  header("Location: ./");
  exit();
}

Функция выхода говорит: остановитесь здесь, не выполняйте остальную часть сценария, поэтому вам не нужен оператор else.

Надеюсь, это вам поможет.

0 голосов
/ 07 февраля 2009
//use request so you can link to the page and log the user in. it would be a good idead to use md5() on $_REQUEST['username'] and $_REQUEST['password'] so the password and usernames arent in plain text.  see http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_md5

if (isset($_REQUEST['login'])) {
$query = mysql_query("
          SELECT * FROM users 
          WHERE user_name = '".md5($_REQUEST['username'])."' 
      AND user_password = '".md5($_REQUEST['password'])."'
");
/* wrong login information? terminate the script */
// there should only be one row returned with the query 
if (mysql_num_rows($query)!=1){
header("Location: ./");
exit();
}

/* set session with unique index */
$_SESSION['id'] = mysql_result($query, 0, 'user_id');
mysql_query("UPDATE users SET user_online = '1' WHERE user_id = '{$_SESSION['id']}'");
header("Location: ./");
exit;
}


//now you can link to the page
<a href="login.php?login=yes&username=**insert md5 hash of user name here**&password=md5 hash of password">auto login</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...