сохранить пользователя в системе, когда он снова посетит ту же страницу?
В настоящее время я использую сеанс для входа в систему пользователя. но когда я закрываю браузер и открываю его снова, мне приходится снова входить в систему. как вы поддерживаете пользователя, вошедшего в систему, скажем, через 2 недели.
Значит, это происходит через файлы cookie?
4 answers
Да. Вы используете файлы cookie для реализации функции "автоматический вход" (или "запомнить меня").
Этот поиск в Google или ОКОЛО ТОГО результаты поиска должны указать вам правильное направление.
Итак, вы хотите опцию "Запомнить меня на этом компьютере"? Вот не зависящий от языка способ, как вы можете это сделать:
- Создайте таблицу БД, содержащую по крайней мере столбцы
cookie_id
иuser_id
. При необходимости также добавьтеcookie_ttl
иip_lock
. Названия столбцов говорят сами за себя, я думаю. - При первом входе в систему (при необходимости только с включенной опцией "Запомнить меня") сгенерируйте длинный, уникальный, трудно угадываемый ключ, который представляет
cookie_id
, и сохраните его в БД вместе сuser_id
. Также храните это значение файла cookie файла cookie с ранее указанным именем файла cookie. Например,remember
. Дайте файлу cookie длительный срок службы, например, один год. - При каждом запросе проверяйте, вошел ли пользователь в систему. Если нет, то проверьте значение файла cookie
cookie_id
, связанное с именем файла cookieremember
. Если он есть и он действителен в соответствии с базой данных, затем автоматически войдите в систему пользователя, связанного сuser_id
, и снова отложите срок действия файла cookie.
Что касается рисков безопасности, если ключ достаточно длинный и смешанный (по крайней мере, 30 смешанных символов), то шансы на грубое принуждение входа в систему ничтожно малы. Далее вы, вероятно, уже поняли, для чего используется дополнительный столбец ip_lock
. Он должен представлять IP-адрес пользователя. В конечном итоге вы можете добавить дополнительный флажок "Заблокировать вход на этот IP-адрес (только если у вас статический IP-адрес)", чтобы сервер мог использовать IP-адрес пользователя в качестве дополнительной проверки.
А что, если кто-то похитил значение файла cookie у пользователя без блокировки IP-адреса? Что ж, против этого мало что можно сделать. Живи с этим. "Запомни меня" забавно для каждого форума и учетной записи - угоны там не повредили бы так сильно, но я бы, конечно, не использовал его для панелей администратора и такого рода веб-страниц, которые контролируют серверные вещи.
В конце концов, это довольно прямолинейно. Удачи.
Прочитайте это: http://www.php.net/manual/en/session.configuration.php
Вам нужна настройка session.cookie_lifetime
. Сессионные файлы cookie (например, те, которые не имеют срока службы) удаляются при закрытии браузера. Если вы хотите, чтобы сеансы оставались живыми дольше, установите этот параметр в php.ini
, httpd.conf
, или .htaccess
. Возможно, даже с ini_set
Редактировать: На самом деле вы можете использовать эту функцию:
session_set_cookie_params (86400*30);
session_start()
86400*30 - это 30 дней.
Смотрите здесь: http://www.php.net/manual/en/function.session-set-cookie-params.php
Да, вы должны сделать это с помощью файлов cookie. Вот ввод вручную: http://php.net/manual/en/features.cookies.php
В качестве альтернативы вы можете взглянуть на эту функцию: http://php.net/manual/en/function.session-set-cookie-params.php . Это позволяет вам изменять настройки файлов cookie сеанса, такие как срок их службы...