2009-12-09 5 views
5

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

через куки-то тогда?

+1

Могут ли те, кто отвечает на вопрос, также созерцать вопросы безопасности по этой теме? Например, как предотвратить автоматический вход в систему путем копирования файла cookie. Благодарю. –

+0

Затем, по крайней мере, упоминайте об угрозе безопасности при использовании сеансов;) – Franz

+0

Вы должны повторно использовать существующую систему проверки подлинности, когда это возможно, потому что, действительно, она сложна. Например, посмотрите https://github.com/delight-im/PHP-Auth – caw

ответ

0

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

Этот google search или SO search results должен указывать на правильное направление.

0

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

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

1

Прочитайте это: http://www.php.net/manual/en/session.configuration.php

параметр, который нужно session.cookie_lifetime. Файлы сеансов cookie (например, те, которые не имеют жизни) удаляются при закрытии браузера. Если вы хотите, чтобы сеансы оставались живыми дольше, установите эту настройку в php.ini, httpd.conf или .htaccess. Возможно, даже с ini_set

Edit: На самом деле вы можете использовать эту функцию:

session_set_cookie_params (86400*30); 
session_start() 

86400 * 30 составляет 30 дней.

Смотрите здесь: http://www.php.net/manual/en/function.session-set-cookie-params.php

9

Так что вы хотите «Запомнить меня на этом компьютере» вариант? Вот язык-агностик способ, как вы можете это сделать:

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

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

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

Это ведь довольно прямолинейно. Удачи.

+0

Я думаю, что было бы хорошей идеей хранить user-agent в базе данных, потому что довольно нелогично, что тот же пользователь будет хотите, чтобы их запомнили как в IE, так и в firefox. На самом деле все, что можно добыть из запроса, нужно сохранить, чтобы предотвратить кражу файлов cookie, не так ли? .. –

+0

Doable, но это не сработает, если пользователь обновит UA. – BalusC

+0

Ну, лучше для пользователя ввести свои данные снова, чем для нарушителя, чтобы получить его доступ. –

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