Je dois définir une session très courte (3 minutes) en cliquant sur une page spécifique sur mon site. Si quelqu'un renvoie à nouveau cette page pendant cette session de 3 minutes, la session doit être mise à jour pour expirer 3 minutes après cette date.Zend_Session et Expiration
Sur mon « bootstrap » (ce n'est pas une amorce Zend typique, mais il est inclus dans chaque page), je fais ce qui suit:
$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);
Ensuite, dans la page qui devrait créer/mettre à jour le session, je:
App::$ReservationSession = new Zend_Session_Namespace("ReservationSession");
$oSaveHandler = Zend_Session::getSaveHandler();
$oSaveHandler->setLifetime(App::$ReservationTimeout);
Je vois les enregistrements dans la base de données, la colonne de durée de vie est correcte, mais si je frappe à plusieurs reprises la page qui crée/met à jour la session, je reçois une nouvelle ID session après 3 minutes passe (et l'autre est retiré après la récupération de place.)
Il semble que le problème consiste à obtenir le cookie pour mettre à jour son heure. Des idées?
Explication géniale, mais j'ai des contraintes de clé étrangère MySQL InnoDB en utilisant l'ID de session, il est donc nécessaire de conserver le même ID de session lors de la mise à jour du délai. Est-il possible de faire ce que rememberMe fait sans changer l'identifiant de session? – Travis