Подтвердить что ты не робот

Как создать постоянные сеансы в PHP?

Я использовал session_start() для запуска сеанса в PHP, но когда мой браузер закрывается, сеанс пропадает.

Как использовать PHP для создания постоянных сеансов, которые заканчиваются в браузере?

4b9b3361

Ответ 1

Смотрите значение 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();

Ответ 3

Сессии разработаны таким образом, что они основаны на "сеансе". Другими словами, если вы закроете свой браузер (который, по сути, ваш сеанс), он должен уйти.

Вы можете попробовать сохранить данные сеанса в базе данных, а не в файле. Сохраните идентификатор сеанса и данные сеанса в таблице. Затем вызовите идентификатор сеанса из файла cookie PHPSESSID (по умолчанию) и найдите данные сеанса из своей базы данных.

Ответ 4

Я бы рекомендовал использовать файлы cookie и базу данных, если вам нужен постоянный сеанс. Мы сохраняем идентификатор клиента (случайное 32-битное буквенно-цифровое значение) в файле cookie, а затем ссылаемся на то, чтобы загрузить информацию о своих клиентах.

Ответ 5

Вы можете начать сеанс без ввода session_start(), и вы можете запустить его с помощью файла cookie, подобного этому

setcookie('PHPSESSID','any id' , any time);

это можно сделать, потому что, когда вы введете session_start(), а затем попытайтесь просмотреть куки файлы, подобные этому

print_r($_COOKIE);

тогда outpout будет:

Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )

просто попробуйте сами

Ответ 6

Я больше не вижу смысла в длительных постоянных сеансах, так как браузеры автоматически сохраняют пароли пользователей.