我需要設置一個非常短的會話(3分鐘),當我的網站上的特定頁面。如果有人在3分鐘的會話中再次點擊該頁面,會話應該更新爲從此時起3分鐘。Zend_Session和過期
在我的「引導」(這不是一個典型的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);
我看到在數據庫中的記錄,壽命列是正確的,但如果我屢創創建/更新會話頁面時,我得到一個新的會話ID3分鐘過後(另一個在垃圾回收後被移除。
看來問題是讓cookie更新它的時間。有任何想法嗎?
非常好的解釋,但我有使用會話ID的MySQL InnoDB外鍵約束,因此在更新超時時需要保留相同的會話ID。記憶Me可以做什麼,而無需更改會話ID? – Travis 2012-03-28 21:19:29