Я использовал session_start()
для запуска сеанса в PHP, но когда мой браузер закрывается, сеанс пропадает.
Как использовать PHP для создания постоянных сеансов, которые заканчиваются в браузере?
Я использовал session_start()
для запуска сеанса в PHP, но когда мой браузер закрывается, сеанс пропадает.
Как использовать PHP для создания постоянных сеансов, которые заканчиваются в браузере?
Смотрите значение php.ini
session.cookie_lifetime.
Значение по умолчанию 0
означает завершение сеанса при закрытии браузера.
Вы можете переопределить это значение либо непосредственно в php.ini
, либо установить его в своем приложении до начала сеанса, используя ini_set. Установка его на что-то большее, чем 0
приведет к тому, что сеанс будет работать в течение этой продолжительности.
например.
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); // 7 day cookie lifetime
session_start();
В приведенном выше примере файл cookie сеанса устанавливается с истечением 7 дней с момента запуска сеанса.
Примечание.. Если вы запустите сеанс для всех своих веб-страниц из одного и того же фрагмента кода, это не будет продолжать продлевать срок действия сеанса каждый раз, когда вызывается session_start()
. Время жизни cookie устанавливается с момента начала сеанса, а не последующих запросов. Если вы хотите продлить срок службы сеанса за 7 дней с текущего времени, см. Также session_regenerate_id().
Также обратите внимание: Если для параметра session.gc_maxlifetime установлено значение, меньшее, чем длина файла cookie сеанса, вы можете получить ситуация, когда пользователь не посещает сайт в течение 5 дней, а когда они возвращаются, cookie сеанса больше недействителен, поскольку данные на сервере были удалены. Чтобы исправить это, вы также должны установить срок службы данных сеанса как минимум на столько же, сколько и срок жизни вашего файла cookie. Как указано в руководстве, может потребоваться использование пользовательского session.save_path
для данных сеанса, которые вы хотите сохранить дольше, чем значение по умолчанию. Поэтому ваш script может выглядеть так:
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
ini_set('session.save_path', '/home/yoursite/sessions');
session_start();
Используйте файл cookie. Например, этот учебник.
Сессии разработаны таким образом, что они основаны на "сеансе". Другими словами, если вы закроете свой браузер (который, по сути, ваш сеанс), он должен уйти.
Вы можете попробовать сохранить данные сеанса в базе данных, а не в файле. Сохраните идентификатор сеанса и данные сеанса в таблице. Затем вызовите идентификатор сеанса из файла cookie PHPSESSID (по умолчанию) и найдите данные сеанса из своей базы данных.
Я бы рекомендовал использовать файлы cookie и базу данных, если вам нужен постоянный сеанс. Мы сохраняем идентификатор клиента (случайное 32-битное буквенно-цифровое значение) в файле cookie, а затем ссылаемся на то, чтобы загрузить информацию о своих клиентах.
Вы можете начать сеанс без ввода session_start()
, и вы можете запустить его с помощью файла cookie, подобного этому
setcookie('PHPSESSID','any id' , any time);
это можно сделать, потому что, когда вы введете session_start()
, а затем попытайтесь просмотреть куки файлы, подобные этому
print_r($_COOKIE);
тогда outpout будет:
Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )
просто попробуйте сами
Я больше не вижу смысла в длительных постоянных сеансах, так как браузеры автоматически сохраняют пароли пользователей.