在点击我网站上的特定页面时,我需要设置一个非常短的会话(3 分钟)。如果有人在该 3 分钟会话期间再次点击该页面,则会话应更新为从该时间起 3 分钟过期。
在我的“引导程序”(它不是典型的 Zend 引导程序,但它包含在每个页面中)上,我执行以下操作:
$aSessionSaveHandlerConfig = array
(
"name" => "Sessions",
"primary" => "Session_ID",
"modifiedColumn" => "UpdateTimestamp",
"dataColumn" => "Data",
"lifetimeColumn" => "Lifetime",
);
$oSaveHandler = new Zend_Session_SaveHandler_DbTable($aSessionSaveHandlerConfig);
$oSaveHandler->setLifetime(App::$ReservationTimeout)->setOverrideLifetime(true);
Zend_Session::setSaveHandler($oSaveHandler);
ini_set("session.cookie_lifetime",App::$ReservationTimeout);
$aSessionOptions = array
(
"gc_probability" => 100,
"gc_divisor" => 100,
"gc_maxlifetime" => App::$ReservationTimeout,
"cookie_lifetime" => App::$ReservationTimeout,
);
Zend_Session::setOptions($aSessionOptions);
然后在应该创建/更新会话的页面中,我有:
App::$ReservationSession = new Zend_Session_Namespace("ReservationSession");
$oSaveHandler = Zend_Session::getSaveHandler();
$oSaveHandler->setLifetime(App::$ReservationTimeout);
我看到数据库中的记录,生命周期列是正确的,但是如果我反复点击创建/更新会话的页面,我会在 3 分钟后得到一个新的会话 ID(另一个在垃圾收集后被删除。
看来问题是让 cookie 更新它的时间。有任何想法吗?