Я хочу добавить что-то на свой сайт. как я могу держать сессию пользователя активным, даже если они случайно закрыли свой браузер. Например, в facebook. если вы заходите на свой сайт и закрываете вкладку или браузер, когда вы снова открываете браузер и посещают facebook, они автоматически обнаруживают активного пользователя и не перенаправляют вас на страницу входа в систему. Как мне это сделать? Благодарю.
Существуют две соответствующие настройки, которые управляют временем жизни сеанса.
Первый – session.cookie-lifetime . Это время жизни файла cookie, который по умолчанию равен 0, что означает, что файл cookie уничтожается, когда браузер закрыт. Увеличивая эту переменную, вы можете установить более длительный срок службы. Это относится к серверному времени, поэтому вам нужно учитывать различия во времени на машине ваших клиентов и на вашем сервере. Предполагая, что они были одинаковыми, установка опции на 3600
означает, что сессия истечет через час. Если вы хотите сохранить сеанс в течение очень долгого времени, вы увеличите это число.
Однако изменить это значение недостаточно. Также есть session.gc-maxlifetime , которое является временем, после которого данные сеанса рассматриваются как мусор в хранилище и уничтожаются. Это отличается от session.cookie-lifetime
потому что эта опция проверяет последнее время доступа к данным сеанса, поэтому оно относится к времени последнего использования данных сеанса (т. Е. Когда последний актив был активен). Даже если вы установите значение session.cookie-lifetime на большое значение, этого будет недостаточно, потому что session.gc_maxlifetime относительно невелик ( 1440
– это значение по умолчанию, которое составляет всего 24 минуты).
Несмотря на то, что вы можете установить эти параметры как относительно высокие значения, так и работать, я бы рекомендовал не делать этого, так как это оставит много ненужных данных сеанса, зависающих в вашем хранилище сеансов, из-за того, что GC не собирает фактическую мертвую сессию ( что также увеличивает вероятность того, что кто-то захватит сеанс в системе, которая не защищена должным образом). Лучший подход заключается в том, чтобы запомниться мне cookie. В основном вы назначаете идентификатор пользователя и некоторый токен аутентификации, который вы храните в базе данных для каждого пользователя (это значит, что кто-то не подделывает куки-файл) в файле cookie, и дайте ему долгий срок службы. В коде инициализации вашего приложения вы проверите, вошел ли пользователь в систему. Если он / она не вошли в систему, вы проверите, установлен ли файл cookie помнить меня . Если это так, вы вытаскиваете пользователя из базы данных на основе идентификатора пользователя в файле cookie, а затем проверяете токен аутентификации в db тот же, что и в cookie. Если они совпадают, вы просто создаете сеанс и автоматически регистрируете пользователя.
По умолчанию PHP держит сеанс пользователя открытым до закрытия браузера. Вы можете переопределить это поведение, изменив настройку INI session.cookie-lifetime
life:
http://www.php.net/manual/en/session.configuration.php
Однако, пожалуйста, см. Сообщение rekot для полного ответа
Для тех, кто сталкивается с этой же проблемой, держать сессионный файл cookie в течение длительного времени легко, в форме входа в систему, когда вы создаете сеанс для первого использования этого кода, он установит время cookie в течение года ( используйте свое время как необходимое).
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 365); ini_set('session.gc-maxlifetime', 60 * 60 * 24 * 365); session_start();
Это должно установить cookie PHPSESSID, и ваш сеанс будет безопасным … но не самый безопасный способ, поэтому используйте его, если вы не против проблем безопасности
Вы должны использовать файлы cookie: http://php.net/manual/en/function.setcookie.php
Просто сохраните там уникальное значение, которое поможет вам идентифицировать пользователя.
Во всяком случае, я настоятельно рекомендую вам использовать какую-то фреймворк, например CodeIgniter или Zend Framework, если только вы не узнаете, как это работает. В этом коде легко совершать критические ошибки, и большинство платформ уже хорошо протестированы и безопасны в использовании.