Когда я нажимаю «запомнить меня» и после выхода из системы, когда я пытаюсь снова войти, куки не извлекаются - PullRequest
0 голосов
/ 01 февраля 2010

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

Я написал код на странице password_match.php (страница действий на странице входа в систему)

$con=mysql_connect("localhost","root","");
if(!$con)
{
die('Could Not Connect:'.mysql_error());
} 

mysql_select_db("tcs",$con);

if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass']))
{
$usr = $_COOKIE['cookname'];
$pwd = $_COOKIE['cookpass'];
$pwd=hash('sha1',$_POST['password']);
}

else
{
$usr=$_POST["username"];                 
$pwd=hash('sha1',$_POST['password']);           
}

Посредством этого кода я проверяю, есть ли куки с именем кука и паролем, которые содержат имя пользователя и пароль. Если с этим именем не найдены файлы cookie, извлеките имя пользователя и пароль из текстовых полей напрямую, если пользователь вводит их.

Теперь код, который я собираюсь написать, установит cookie, если имя пользователя и пароль существуют:

if ($ result) { $ Строка = mysql_fetch_array ($ результат);

if (($row["Username"]==$usr) && ($row["Password"]==$pwd))
{
    if(isset($_POST['remember']))
    {
    setcookie("cookname", $row['Username'], time()+60*60*24*100, "/");
    setcookie("cookpass", $row['Password'], time()+60*60*24*100, "/");
    }


$_SESSION['employee']['id']=$row['User Id'];
    $_SESSION['employee']['username']=$row['Username'];

    header ("Location: home_page.php");

}

Теперь при запуске, когда я ввожу имя пользователя и пароль, и если они верны, должно быть установлено cookie, и если теперь я вышел из системы и попробовал ту же форму входа, так как, по моему мнению, он должен получить cookie, но ничего здесь счастливы Я не могу это реализовать. Куда я иду не так?

Ответы [ 2 ]

1 голос
/ 08 февраля 2010

Ну, я создаю свои файлы cookie для моего сайта в соответствии с этой статьей: http://jaspan.com/improved_persistent_login_cookie_best_practice

Вам следует прочитать его, чтобы узнать, как создавать постоянные файлы cookie и не допускать, чтобы украденные файлы cookie наносили ущерб данным пользователя.

В моем приложении пользователь, использующий постоянные файлы cookie для входа в систему, ограничен в просмотре только действий. Действие, которое изменит данные, требует от пользователя входа в систему с помощью формы входа. Гораздо больше похоже на то, что используется в почте Yahoo.

1 голос
/ 01 февраля 2010

Вот краткий обзор простой системы. Создайте таблицу, которая выглядит следующим образом:

auth_token { user_id int, token varchar(...) }

Когда человек нажимает кнопку «запомнить меня», создайте уникальный токен, который невозможно угадать, и сохраните его в таблице auth_token вместе со связанным user_id. Сохраните это token как печенье.

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

Некоторые вещи, которые следует учитывать:

  • Вы можете привязать cookie к диапазону IP-адресов
  • Срок действия может истечь через X дней
  • Вы можете рассматривать автоматический вход как «мягкий вход» и требовать ввода пароля при первом действии, которое считается небезопасным

Только если пользователь щелкает ссылку «Выйти», вы удаляете куки-файл с компьютера. По желанию у вас может быть «Выйти из меня из любого места», в котором вы удалите все хэши из баз данных, связанных с этим пользователем.

Но что бы вы ни делали, не сохраняют имя пользователя или пароль в куки. Это серьезная дыра в безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...