сохранить пользователя в системе, когда он снова посетит ту же страницу?


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

Значит, это происходит через файлы cookie?

Author: never_had_a_name, 2009-12-10

4 answers

Да. Вы используете файлы cookie для реализации функции "автоматический вход" (или "запомнить меня").

Этот поиск в Google или ОКОЛО ТОГО результаты поиска должны указать вам правильное направление.

 0
Author: Jan Hančič, 2017-05-23 12:30:42

Итак, вы хотите опцию "Запомнить меня на этом компьютере"? Вот не зависящий от языка способ, как вы можете это сделать:

  1. Создайте таблицу БД, содержащую по крайней мере столбцы cookie_id и user_id. При необходимости также добавьте cookie_ttl и ip_lock. Названия столбцов говорят сами за себя, я думаю.
  2. При первом входе в систему (при необходимости только с включенной опцией "Запомнить меня") сгенерируйте длинный, уникальный, трудно угадываемый ключ, который представляет cookie_id, и сохраните его в БД вместе с user_id. Также храните это значение файла cookie файла cookie с ранее указанным именем файла cookie. Например, remember. Дайте файлу cookie длительный срок службы, например, один год.
  3. При каждом запросе проверяйте, вошел ли пользователь в систему. Если нет, то проверьте значение файла cookie cookie_id, связанное с именем файла cookie remember. Если он есть и он действителен в соответствии с базой данных, затем автоматически войдите в систему пользователя, связанного с user_id, и снова отложите срок действия файла cookie.

Что касается рисков безопасности, если ключ достаточно длинный и смешанный (по крайней мере, 30 смешанных символов), то шансы на грубое принуждение входа в систему ничтожно малы. Далее вы, вероятно, уже поняли, для чего используется дополнительный столбец ip_lock. Он должен представлять IP-адрес пользователя. В конечном итоге вы можете добавить дополнительный флажок "Заблокировать вход на этот IP-адрес (только если у вас статический IP-адрес)", чтобы сервер мог использовать IP-адрес пользователя в качестве дополнительной проверки.

А что, если кто-то похитил значение файла cookie у пользователя без блокировки IP-адреса? Что ж, против этого мало что можно сделать. Живи с этим. "Запомни меня" забавно для каждого форума и учетной записи - угоны там не повредили бы так сильно, но я бы, конечно, не использовал его для панелей администратора и такого рода веб-страниц, которые контролируют серверные вещи.

В конце концов, это довольно прямолинейно. Удачи.

 9
Author: BalusC, 2009-12-09 22:50:26

Прочитайте это: 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

 1
Author: gahooa, 2009-12-09 22:07:51

Да, вы должны сделать это с помощью файлов cookie. Вот ввод вручную: http://php.net/manual/en/features.cookies.php

В качестве альтернативы вы можете взглянуть на эту функцию: http://php.net/manual/en/function.session-set-cookie-params.php . Это позволяет вам изменять настройки файлов cookie сеанса, такие как срок их службы...

 0
Author: Franz, 2009-12-09 22:07:30