Авторизация php+mysql, запоминание на cookie

В обсуждении и разборе моей давней статьи о системе авторизации на PHP и MySQL, кто-то интересовался как сделать опцию "Запомнить" и автоматический вход. Это довольно просто, но так как есть желающие - нужно подробно описать. Я не буду повторять предыдущую статью, а буду на нее ссылаться.

Итак, в форме авторизации добавляем чекбокс для запоминания:

<input type="checkbox" name="remember">

Теперь смотрим наш обработчик этой формы - скрипт "login.php". Сначала рассмотрим т.н. первую авторизацию — при удачной авторизации и если отмечена опция "запомнить", пишем в cookie браузера специальную строку token. Эти строки нужно добавить после открытия сессии в файле "login.php":

$token = md5(time().$login);
if ($_POST['remember']) {
   setcookie('token', $token, time() + 60 * 60 * 24 * 14);
}

Сразу после этого, нужно записать ту же строку token, в базу данных, в строку для залогинившегося юзера. Впоследствии мы будем искать по этой строке (когда она придет из куки) нужного пользователя.

   mysql_query("UPDATE users SET token='$token' WHERE login='$login'");

Ну вот, теперь остался последний шаг — авторизовать посетителя автоматически при его заходе на сайт. Для этого, после старта сессии, в каждом документе нужно сделать такую проверку:

if (isset($_COOKIE['token']) && !isset($_SESSION['user'])) {
   $token = htmlspecialchars($_COOKIE['token']); // на всякий сл.
   $res = mysql_query("SELECT login FROM users WHERE token='$token'", $link);
   if (mysql_num_rows($res) < 1) {
      setcookie('token', '');
   }else {
      $_SESSION['user'] = mysql_result($res, 0);
   }
}

: Здесь мы смотрим — если юзер еще не залогинен и пришла нужна кука, ищем запись в базе данных соответствующую данной куке, если запись есть — авторизуем посетителя.

Ну и последний штрих: в скрипте "logout.php", при удалении из сессии пользователя, удаляем его куку:

setcookie('token', '');

Вот и все. В прикрепленном архиве можете взглянуть overall на все исходники. И еще напомню: эти скрипты претендуют скорее на звание обучащих, чем на готовое решение. Поэтому не ленитесь, читайте и разбирайтесь. Вопросы можно в каменты.

Теги: 
Файлы: 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <i> <strong> <b> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
CAPTCHA на основе изображений
Введите код с картинки