Доступ к данным сеанса с идентификатором сеанса - PullRequest
2 голосов
/ 09 августа 2010

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

Моя цель - иметь базовую функцию «запомнить меня».Обычно я сохраняю информацию о входе пользователя в cookie, но поскольку это небезопасно, мне интересно, какова альтернатива.Я понимаю, что каждый раз, когда я создаю сеанс, он создает cookie, который создает уникальный идентификатор, но истекает, когда я закрываю свой браузер.Итак, как мне получить доступ к этой информации о сеансе после закрытия браузера?

Вся помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Возможно, наилучший подход, как было предложено и то, что делают большинство сторонних приложений, - это создать таблицу базы данных "user_sessions" со следующими полями:

session_id (var_char)
user_id (int)
ip_address (var_char)
last_logged_in (unix timestamp)

Затем использовать cookie для храненияхэш md5, что вам нравится, возможно:

md5($username.$ip); //since md5 has a lot of reverse look ups now you should use a number of fields to validate. You could use a different crypto function to make it more difficult to crack, but md5 is the simplest version available in all php versions.

РЕДАКТИРОВАТЬ: Затем вы сравните сохраненный хеш из cookie с базой данных session_id , чтобы увидеть, если они уже вошли в систему.Причиной объединения пары полей в функции md5 является создание менее «угадываемого» формата хеширования.Это снижает вероятность того, что кто-то сможет редактировать cookie-файл и войти в систему под именем другого пользователя.

Это может быть сделано для всех пользователей (таким образом вы можете отслеживать, кто находится в сети) и просто установить «постоянный» вход в систему.переменная в куки.например.

p_login=true || p_login=false

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

примечание: вы можете посмотреть на http://www.openwall.com/articles/PHP-Users-Passwords по-другомухэшировать пароли, session_ids и пользователей.

2 голосов
/ 09 августа 2010

Это может быть довольно крутой кривой обучения. Рассматривали ли вы вопрос об использовании ранее существующей CMS или другого решения для достижения ваших целей или даже о фреймворке, который может включать эту функцию?

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

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

...