SESSION jak zjistím, jestli je regenerated?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vymak
Člen | 92
+
0
-

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
+
0
-

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)

vymak
Člen | 92
+
0
-

Díky za nástřel řešení vyzkouším to :) Já jsme práve myslel, že když dojde k přegenerování SESSION ID tak že dojde i ke smazání obsahu SESSION. Ale teď jsem si vyzkoušel, že i když provedu přegenerování tak data v SESSION zůstanou :)

Tomáš Kolinger
Člen | 136
+
0
-

Ta regenerace ID je čistě kvůli zabezpečení, aby se trochu zkomplikovalo ukradení sessionId.