php: сохранить логин, хотя браузер закрыт

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

при использовании $_SESSION он исчезал при закрытии браузера. Итак, мы можем использовать $_COOKIE, но он выглядит менее безопасным, чем сеанс.

Как yahoo, facebook, twitter или любой сайт создают свою систему входа в систему, поэтому, когда пользователь закрывает браузер, он остается в системе? Используя ИП? $_СЕССИЯ? $_COOKIE? или что?

Спасибо


person Bagus Javas    schedule 23.06.2013    source источник


Ответы (5)


Как сказал Освальд, не используйте $_SESSION, так как это заканчивается, когда браузер закрывается.

Переменные сеанса хранятся в виде файлов cookie, поэтому создание собственных не является less secure.

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

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

ИЗМЕНИТЬ

См. эту ссылку, чтобы узнать, как использовать setcookie.

setcookie("session_key", "somerandomstringrepresentingasessionkey", time() + 60*60*24*120);

Следующее установит ключ сеанса для вашего веб-сайта с именем session_key, именно так вы будете получать данные во время выполнения:

$session = $_COOKIE['session_key'];

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

Следующая часть - это время до истечения срока его действия, здесь я поставил 60 * 60 * 24 * 120, что означает текущее время плюс 60 секунд, умножить на 60 минут, умножить на 24 часа, на время 120 дней. Это означает, что через 120 дней с этого момента срок действия этого конкретного файла cookie истечет, даже если браузер будет закрыт до этого.

person Matt Clark    schedule 23.06.2013
comment
$_SESSION не заканчивается при закрытии браузера. Он заканчивается, когда он удаляется сборщиком мусора сеанса PHP. - person Oswald; 23.06.2013
comment
@ Освальд, но я не буду доступен, когда браузер закрыт, верно? - person Bagus Javas; 23.06.2013
comment
Зависит от времени жизни файла cookie, который используется для идентификации сеанса. - person Oswald; 23.06.2013
comment
@MattClark, собираюсь попробовать это решение. Спасибо, мужик - person Bagus Javas; 23.06.2013
comment
Не проблема, надеюсь, я смог помочь. Удачного кодирования! - person Matt Clark; 23.06.2013

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

person Faisal    schedule 23.06.2013
comment
Сеансовые файлы cookie всегда истекают при закрытии браузера. Это определение сеансовых файлов cookie. - person Oswald; 23.06.2013
comment
Интересно, тогда, возможно, комбинация как setcookie, так и долгоживущей сессии. - person Faisal; 23.06.2013
comment
нет сеанса, просто долгоживущий файл cookie, вы используете файл cookie для сохранения пользовательского ключа сеанса - person Matt Clark; 23.06.2013

Зашифруйте необходимую информацию в файле cookie, когда пользователь вошел в систему. Когда они посещают ваш сайт, расшифруйте файл cookie, чтобы получить вашу информацию.

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

person Nick    schedule 23.06.2013
comment
я использую mcrypt для пароля .. поэтому я должен сохранить зашифрованный файл cookie? Будет ли cookie хорошо хранить зашифрованный символ? - person Bagus Javas; 23.06.2013
comment
Не храните зашифрованный пароль в файле cookie. В файле cookie хранится необходимая информация о сеансе, которая, вероятно, будет проверяться в базе данных, и если они совпадают, это действительный сеанс. Затем покажите пользователю свое представление, когда они вошли в систему. Это один из способов. - person Nick; 23.06.2013
comment
Большое спасибо за ваше объяснение @Nick. - person Bagus Javas; 23.06.2013

Убедитесь, что вы не используете файл cookie сеанса для идентификации сеансов. Для этого используйте session_set_cookie_params(), чтобы передать файл cookie более длительный срок службы.

Убедитесь, что сеансы имеют длительный тайм-аут. Это можно сделать, изменив значение session.gc-maxlifetime параметр конфигурации.

person Oswald    schedule 23.06.2013
comment
не использовать сеансовый файл cookie? как сделать? я очень новичок в php. а давно нет? - person Bagus Javas; 23.06.2013
comment
Сеансы на сервере обычно идентифицируются файлом cookie. Куки-файлы бывают двух видов: 1) сеансовые куки-файлы (действительны, пока открыт браузер) 2) постоянные куки-файлы (действительны, пока вы указали при настройке куки-файла). Используйте постоянные файлы cookie для идентификации сеансов. - person Oswald; 23.06.2013
comment
Большое спасибо @Oswald, после этого я бы искал «постоянные файлы cookie». - person Bagus Javas; 23.06.2013

Похоже, что StackOverflow и Youtube используют локальное хранилище.

В отличие от куки, локальное хранилище не имеет срока действия, но когда пользователь входит в систему или делает что-то, что меняет что-то на сервере, вам нужно будет вручную отправить данные в локальном хранилище на сервер для проверки (через XHR или какой-либо другой способ общения). Когда пользователь выходит из системы, вызовите window.localStorage.removeItem() с ключом, под которым вы сохранили информацию для входа.

person user2350838    schedule 23.06.2013