SESSION jak zjistím, jestli je regenerated?
- vymak
- Člen | 92
Ahoj, nastavil jsem si v SESSION platnost na 30 minut. Když je tuto dobu uživatel neaktivní a třeba po 40 minutách klikne na tlačítko vložit do košíku, chtěl bych aby se vypsala informace, že platnost SESSION již vypršela.
Tedy něco ve stylu:
if ($this->session->regenerated)
$this->flashMessage('SESSION vypršela, prosím vytvořte poptávku znovu', NULL, 'Homepage:default', self::NOTICE);
Když si SESSION dumpnu, tak přímo obsahuje property:
/** @var bool has been session ID regenerated? */
private $regenerated;
Když se vygeneruje nové SID tak se nastaví na TRUE a podle toho bych jednoduše poznal, zda-li SESSION byla přegenerovaná. Háček je v tom, že je private. Je jednoduchá možnost to přepsat na public, ale nechce se mi dělat taková prasárna :D
Poradí mi někdo jak to lze jednoduše vyřešit?
Editoval vymak (22. 2. 2014 19:43)
- Tomáš Kolinger
- Člen | 136
No to ale neříká, zda sezení vypršelo. To jen říká, že se provedla regenerace, kterou můžeš provádět i ty sám přes Session->regenerateId()…
Nebylo by lepší data ukládat do IUserStorage, tj. mít anonymous uživatele v roli guest a následně řešit vypršení jako normálně?
if ($this->user->logoutReason === Nette\Security\IUserStorage::INACTIVITY) {
$this->flashMessage('You have been signed out due to inactivity. Please sign in again.');
}
Čistě přes session by sis musel udržovat nějakej identifikátor (ne sessionId, protože to se může klidně měnit). Zároveň ho zaznamenat v cookies a pokud se změní, tak víš, že sezení vypršelo.
Editoval Tomáš Kolinger (22. 2. 2014 20:02)
- Tomáš Kolinger
- Člen | 136
Ta regenerace ID je čistě kvůli zabezpečení, aby se trochu zkomplikovalo ukradení sessionId.