Ответ 1
Используйте session_set_cookie_parameters()
, чтобы дать cookie сеанса ненулевое время жизни перед началом сеанса или установить session.cookie_lifetime
в ненулевое значение.
Может ли кто-нибудь сказать, как поддерживать сеанс (в PHP), чтобы содержание сеанса было сохранено и доступно даже после перезапуска браузера.
В общем, сеанс заканчивается закрытием браузера, но я хочу, чтобы сессия НЕ ЗАКРЫЛА, чтобы доступ к данным сеанса можно получить при следующем использовании браузера.
Используйте session_set_cookie_parameters()
, чтобы дать cookie сеанса ненулевое время жизни перед началом сеанса или установить session.cookie_lifetime
в ненулевое значение.
Это оксюморон.
Сессия означает "до закрытия браузера".
Сессия заканчивается.
Если вы не хотите, чтобы срок его действия истек, вам, вероятно, не нужен сеанс вообще.
Вероятно, вы используете сеанс обмена сообщениями с файлом cookie или базой данных.
Сессия в php (и в большинстве веб-технологий) работает следующим образом:
Вы сохраняете идентификатор сеанса в файле cookie на клиентском компьютере.
Когда клиент приходит на ваш сайт, он отправляет вам идентификатор сеанса.
Сервер находит данные сеанса в файле с идентификатором сеанса и загружает его.
Таким образом, закрытие браузера не влияет на сеанс, но если браузер пуст файл cookie, когда вы его закрываете (я не думаю, что какой-либо браузер делает такую вещь).
Если вы уверены, что пользователь всегда вошел в систему, вы можете сохранить его имя пользователя/пароль в своих файлах cookie, но это не очень безопасно.
Самый простой и лучший из них - это то, что вместо просто 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
Вы можете сделать что-то вроде этого: (см. 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
также см. этот вопрос
Это можно сделать, если вы используете файлы cookie вместо сеансов.