Здравствуйте все,
Это в основном вопрос корректуры, если можно так выразиться.
Так, Мне нужно создать постоянный сеанс для сайта интернет-магазина / электронной коммерции. Сеанс, продолжающийся в течение указанного времени, не является проблемой, но важно, чтобы он длился, скажем, 24 часа с момента последнего клика.
Зачем: Для быстрой проверки статуса корзины, последних посещенных страниц, выбора налогов и валюты и т. Д. Без запросов, не говоря уже о записи в базу данных или некоторый другой механизм хранения при каждом запросе страницы. Корзина и история просмотров достаточно сложны, чтобы их можно было сохранить в сеансе. Язык, валюта и т. Д. Также могут быть cookie-файлами.
Большая часть нашего сайта кэшируется в формате html, и только несколько элементов, таких как содержимое корзины, привязываются к завершенной странице. У нас очень хорошие времена отклика сервера, и я бы хотел, чтобы они оставались такими и избегали чего-либо слишком тяжелого, особенно для пользователей, у которых ничего нет в корзине.
Я просмотрел довольно много постов в StackOverflow и Google в целом, чтобы получить общее представление об этом. Большинство результатов касалось обеспокоенности и обеспечения того, чтобы сессия закрывалась в любом случае по истечении определенного периода времени. Этот случай противоположен.
Итак, PHP имеет несколько настроек сеанса в ini, три из которых являются наиболее важными:
session.cookie_lifetime: Это время жизни для PHPSESSID -cookie, которое позволяет PHP извлекать соответствующий сеанс. По умолчанию это ноль, что означает, что cookie уничтожается, когда
браузер закрывается. Таким образом, он может жить в течение одной миллисекунды или двух лет
если установлено на ноль.
Установка целочисленного значения даст cookie срок действия
со времени первого набора. Время жизни не будет переадресовано при последующих загрузках страницы при запуске сеанса.
Итак, вот пример «заголовка сессии», который я придумал. Он должен по крайней мере гарантировать, что файлы сеанса хранятся в течение не менее $ lt секунд после первый начало сеанса, и файл cookie сеанса $ lt секунд от прошлой выполнение этого скрипта. В вопросе комментария записывается сеанс, что, по моему мнению, приведет к обновлению времени файла и, таким образом, к истечению срока сеанса до $ lt, так как прошлой выполнение сценария.
<?php
/**
* Example "header" to start a session in a simple environment
*/
// Lifetime setting in seconds
$lt = 1440;
// Set maxlives to $lt
ini_set('session.gc_maxlifetime', $lt);
ini_set('session.cookie_lifetime', $lt);
// Save sessions in a different directory than other sessions. The gc
// will run on a probability base on each session start and clean the default
// directory. If our (longer) sessions are saved in a shared session dir
// for other PHP scripts which have a shorter expiry, our files will also be
// removed.
// If we run a single site, use php.ini to set the above max lives,
// or are the only ones using sessions, we can omit this directive.
ini_set('session.save_path', '/var/www/mysite/separate-session-dir');
// Start the session AFTER setting the parameters
session_start();
// Update the cookie expiration on a page load.
// This will simply overwrite the system-set session cookie.
setcookie(session_name(),session_id(),time()+$lt, '/');
// QUESTION: Would this forward the session FILE lifetime by writing to it.
$_SESSION['random-field'] = uniqid();
// Do what you really meant to do with your script.
Так. Вот. Работает ли это как простой способ гарантировать, что сессии живут не менее $ lt секунд, или я что-то упустил?
В настоящее время я запускаю это на нашем сервере без ini_sets и пути сохранения, так как они установлены в php.ini. Часть cookie, кажется, достаточно легко проверить, закрыв браузер и вернувшись, чтобы увидеть, была ли корзина опустошена или нет, но файл-часть сложнее проверить, и я хотел бы узнать ваше мнение об этом.
PS. Извините за заполнение тегов e-commerce / webshop, но я часами искал пост, который бы смотрел на вещи с этой точки зрения.
Задача ещё не решена.
Других решений пока нет …