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