Установите куки для сохранения данных логина PHP - PullRequest
4 голосов
/ 20 декабря 2010

У меня типичный логин (имя пользователя, пароль), а также я хочу включить флажок «сохранить мои данные».Форма входа Публикует свои значения в login_script.php, и, если вход успешен, пользователь перенаправляется на главную страницу сайта.

Я пытаюсь использовать этот метод для сохранения данных входа

//Remember Me Function

if(isset($_POST['remember_me'])){

    // Set a cookie that expires in 24 hours
    setcookie("username",$username, time()+3600*24);
    setcookie("password",$password, time()+3600*24);

}

Теперь, насколько я понимаю, setcookie("username",$username, time()+3600*24); должен быть установлен вверху страницы PHP, прежде чем будет выполнен любой другой код.

Моя проблема в том, что я не хочу устанавливать cookie, если пользователь не вошел в систему. Однако из-за функции set cookie, вызываемой в середине скрипта после теста входа в систему, он не будет работать,

Есть идеи?Приветствия.

Ответы [ 2 ]

8 голосов
/ 20 декабря 2010

Прежде всего: не сохраняйте пароли в куки! Это очень плохая идея с точки зрения безопасности.

Что касается вашей проблемы: у вас нет выхода, вам не нужно ничего выводить перед установкой файла cookie. Есть два способа добиться этого:

Решение 1: страница входа всегда перенаправляет

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

Решение 2: буферизация вывода

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

Лично я считаю решение № 1 более элегантным и превосходным по функциям.

3 голосов
/ 20 декабря 2010

Это очень плохая практика - хранить пароль там, где пользователи имеют доступ (на стороне клиента).Хуже того, вы не хешируете и не шифруете пароль при хранении пароля (клиенты могут видеть пароль!)

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

Вы можете сделать это вместо этого:

  • Сохранить пароль в сеансе
  • Продлить срок действия сеанса на более длительное время.

Или вы можете вместо этого

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

Но я всегда рекомендую первый, потому что его легче реализовать, а обработка сеанса выполняется PHP (если вы не отменяете обработку сеанса)

...