2010-10-18 7 views
1

У меня возникли проблемы с созданием способа сохранения сеанса с файлом cookie на нескольких страницах. Я делаю что-то очень похожее на это tutorial. Я проверяю пароль и имя пользователя на всплывающей странице, и если это правильно, я устанавливаю файл cookie и заполняю его хешем. После этого я переношу пользователя на другую страницу. Если имя пользователя/пароль неверно, оно просто перенаправляется обратно на страницу всплеска.Поддержание сеанса на нескольких страницах

Основная проблема, которую я не могу понять, - проверить, насколько важен cookie на нескольких страницах. Как показывает учебное пособие, я делаю это на PHP. Я полагаю, что размещение хэша на новой странице неверно, но я не могу придумать другой способ проверить правильность сеанса/пользователя перед загрузкой страницы.

Заранее спасибо.

+3

Придерживайтесь '$ _SESSION', нет причин для взаимодействия с кукисами напрямую для этого. – meagar

ответ

10

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

Лучше (и невероятно безопаснее, чем учит «учебник») - это использовать регулярные сеансы PHP. PHP позаботится о настройке cookie сеанса для вас, и все, что вы делаете, - это хранить ваши данные аутентификации в сеансе. Эти данные никогда не будут отправляться пользователю, если вы не сделаете это самостоятельно. Единственное, что происходит взад и вперед, - это cookie сеанса, который представляет собой строку случайного мусора, который «уникально» идентифицирует пользователя для PHP.

После того, как вы получили, что часть сделала, то небольшой фрагмент кода в верхней части всех входа-страниц требуется, это выглядит примерно так:

<?php 

session_start() 
if ($_SESSION['loggedin'] !== TRUE) { 
    header("Location: http://example.com/login.php"); 
    echo 'You must log in first'; 
    exit(); 
} 
?> 
<h1>Welcome back, <?php echo $_SESSION['username'] ?></h1> 

Если вы не работаете на неправильно настроенный PHP или PHP-версия из каменного века, нет никакого способа, чтобы удаленный пользователь каким-то образом установил флаг «loggedin», не пройдя сначала код.

+1

Ничего плохого в использовании файлов cookie, если вы md5 пароль с солью, прежде чем хранить его. Но вы правы, учебник ужасен, и никто не должен хранить ясные текстовые пароли где угодно (включая базу данных). – Noodles

+0

Итак, после проверки пароля и имени пользователя, я начинаю сеанс и загружаю новую страницу. А при загрузке новой страницы я проверяю, зарегистрирован ли сеанс? – Aya

+0

@aya: да, это основа. Вы можете начать сеанс независимо от того, как вошел вход, и сохранить количество попыток входа (легко обойти, удалив файл cookie, но он может остановить менее умных людей на своих дорожках). Только если логин успешно выполнен, вы сохраняете флаг «loggedin». –

Смежные вопросы