Можно ли сохранить сессию даже после закрытия браузера? - PullRequest
14 голосов
/ 10 сентября 2010

Может ли кто-нибудь рассказать, как поддерживать сеанс (в PHP), чтобы его содержимое сохранялось и было доступно даже после перезапуска браузера.

Обычно сеанс истекает с закрытием браузера,но я хочу, чтобы сессия НЕ ЗАКРЫВАЛАСЬ, чтобы к данным сеанса можно было получить доступ при следующем использовании браузера.

Ответы [ 6 ]

20 голосов
/ 10 сентября 2010

Используйте session_set_cookie_parameters(), чтобы присвоить cookie сеанса ненулевое время жизни до начала сеанса, или установите session.cookie_lifetime в ненулевое значение.

8 голосов
/ 10 сентября 2010

Это оксюморон.
Сеанс означает «пока браузер не будет закрыт».
Сессия - это то, что истекает.
Если вы не хотите, чтобы его срок действия истек, вы, вероятно, вообще не хотите сеанса.

Возможно, вы переписываетесь с cookie или базой данных.

4 голосов
/ 10 сентября 2010

Сеанс в php (и в большинстве веб-технологий) работает так:

Вы сохраняете идентификатор сеанса в файле cookie на клиентском компьютере.

Когда клиент заходит на ваш сайт, он отправляет вам идентификатор сессии.

Сервер находит данные сеанса в файле с идентификатором сеанса и загружает его.

То есть закрытие браузера не влияет на сеанс, но если браузер очищает куки при закрытии (я не думаю, что какой-либо браузер делает это).

Если вы хотите быть уверены, что пользователь всегда вошел в систему, вы можете сохранить его имя пользователя / пароль в его файлах cookie, но это не совсем безопасно.

2 голосов
/ 01 февраля 2017

Самое простое и лучшее, что я нашел, это то, что вместо session_start мы должны вводить это на каждой странице, где есть сессия

$expire = 365*24*3600; // We choose a one year duration

ini_set('session.gc_maxlifetime', $expire);

session_start(); //We start the session 

setcookie(session_name(),session_id(),time()+$expire); 
//Set a session cookies to the one year duration
0 голосов
/ 03 июля 2016

Вы можете сделать что-то вроде этого: (см. session_set_cookie_parameters() и session_name())

// long long time
$sessionTime = 365 * 24 * 60 * 60;
$sessionName = "my_session";
session_set_cookie_params($sessionTime);
session_name($sessionName);
session_start();

if (isset($_COOKIE[$sessionName])) {
    setcookie($sessionName, $_COOKIE[$sessionName], time() + $sessionTime, "/");
}

Для $sessionTime см. Также этот вопрос

0 голосов
/ 10 сентября 2010

Это можно сделать, если вы используете куки вместо сессий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...