Продлеваем время жизни сессии PHP

Иногда возникает ситуация, когда нужно продлить время жизни сессии на сайте.

При использовании сессий в PHP по умолчанию идентификатор сесии сохраняется в "куках" или "кукисах" - небольших блоков информации, которые хранятся на стороне клиента и имеет заданное время жизни. (в PHP куки доступны при помощи глобального массива $_COOKIES). Название идентификатора сессии - "PHPSESSID", но его можно изменить при помощи параметра session.name в файле php.ini.

Время жизни куки, которая хранит идентификатор сесии по умолчанию составляет 0 сек, т.е. кука храниться до того момента, как браузер будет закрыт. Это можно изменить при помощи параметра session.cookie_lifetime в файле php.ini.

PHP, как правило, хранит данные сессии в файлах. Для того, чтобы не засорять файловую систему периодически осуществляется очистка устаревших данных, garbage collection - уборка мусора. В файле php.ini существует параметр session.gc_maxlifetime который указывает время в секундах, по истечению которого все устаревшие данные будут удалены из файловой системы.

Допустим, мы хотим задать время жизни сесии - 3 часа. Для этого в файле php.ini устанавливаем следующие параметры:

session.gc_maxlifetime = 10800

session.cookie_lifetime = 10800

Если у вас нет возможности внести изменения в файл php.ini, то можно сделать установку этих параметров при помощи файла .htaccess. Для этого вносим в него следующие строки:

php_value session.gc_maxlifetime 10800
php_value session.cookie_lifetime 10800

Если ваш хостер запрещает вам использовать директиву php_value в файле .htacces или использовать .htaccess в целом - то пора менять хостера.

Кроме того, вы можете установить время жизни сессионной куки из PHP при помощи функции session_set_cookie_params. К примеру:

<?php

session_set_cookie_params(10800);

?> 

При этом нужно учитывать, что функциция set_cookie_params должна быть вызвана до того, как сессия будет открыта при помощи session_start.Функция set_cookie_params также позволяет установить путь, домен, настройки безопасности для сессионной куки.

 

 

Комментарии

PHP. Народные советы

Спасибо!!! Помогло, очень

Спасибо!!! Помогло, очень долго искал, но ничего не работало так как надо. Терялся в догадках, и, наконец, наше именно то, что надо. Все заработало.

:)

Автор, спасибо, помогло!

Спасибо очень

Спасибо очень интересная статья. Только не на всех хостингах работать будет. [ссылка удалена администратором]

а как удалить

а как удалить PHPSESSID из куков?
Попробуйте войти на сайте [адрес удален администратором] и потом выйти. В куках остается этот PHPSESSID.

а как удалить

а как удалить из людей желание на шару расставлять ссылки? тем более не имеющие никакого отношения к тематике статьи?

session_set_cookie_params(108

session_set_cookie_params(10800);
устанавливает только session.cookie_lifetime, тоесть maxlifetime останется дефолтным - 1440.

Ockonal

Спасибо, помогло очень.

Время жизни сесии

Спасибо, искал эту информацию.