Session a trvalé přihlášení checkboxem

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

Zdravím, narazil jsem na problém, se kterým neumím hnout, nebo spíše tomu asi dostatečně nerozumím.
Chtěl bych jednoduše zprovoznit trvalé přihlášení, ale až poté, co uživatel zaškrtne checkbox:

if ($values->permanentLogin) {
                $user->setExpiration('+14 days', FALSE);
            }

Jenže abych to mohl použít, tak musím mít v configu toto:

		session:
			autoStart: smart
			expiration: +14 days

Jinak mi to vyhazuje notice u toho checkboxu: The expiration time is greater than the session expiration 10800 seconds

Když to tedy mám v configu, tak když se zkusím přihlásit ale bez trvalého přihlášení, vypnu prohlížeč a zkusím to znovu, tak jsem stále přihlášen, to i přesto, že jsem nedal to trvalé přihlášení. Jak tedy nastavit, aby byl uživatel trvale přihlášen jen tehdy, když to zaškrtne a ne pořád, resp. po dobu expirace?

hAssassin
Člen | 293
+
0
-

ano, v configu musi byt nastavena dostatecne velka expirace session oproti aplikaci, cili v aplikaci nesmi byt vetsi expirace nez je v configu. A proc ti to nefunguje? Jaky je else ty podminky? predpokladam ze nejaky takovy:

if ($values->permanentLogin) {
	...
} else {
	$user->setExpiration('+1 hour', FALSE);
}

Nastav druhy parameter na TRUE a treti idealne taky, coz zaruci ze se session zrusi po zavreni prohlizece. Pokud tam else nemas, tak ho tam potrebujes ;)

Draffix
Člen | 146
+
0
-

No neměl jsem ho tam, předpokládal jsem, že to tak funguje automaticky (jako většina věcí u nette :)). Nicméně teď mám toto:

if ($values->permanentLogin) {
    $user->setExpiration('+14 days', FALSE);
} else {
    $user->setExpiration('+1 hour', TRUE, TRUE);
}

Po zavření již není uživatel přihlášen, což je správně a co jsem chtěl, ale stále jsou aktivní session, přesněji $_SESSION["cart"]. Jak zajistit, aby se po zavření prohlížeče smazaly i tyto? Nebo rovnou nějak globálně je smazat.

hAssassin
Člen | 293
+
0
-

no ale ty tim nastavis pouze expiraci sessny pro prihlaseni uzivatele. o ostatni veci se uz musis postarat sam. Bud je mazat v logout() metode nebo jim pri vytvoreni dany sekce nastavit expiraci na stejnou jako pri loginu, nebo ji nastavit na NULL, viz api, pak by se sekce mela zrusit pri zavreni prohlizece. Resit nakupni kosik pro prihlasenyho uzivatele pres session mi ale neprijde uplne ok.

Draffix
Člen | 146
+
0
-

Já vím, že to není ideální, ale mám to jak v databázi (aby věci v košíku zůstaly), tak po přihlášení se mi to „překopíruje“ do session, aby se mi pak lépe pracovalo dále v šablonách a nemusel tak celý proces objednávky dělit na tu jednu část, která není přihlášena a je to řešeno pomocí sessions a tu druhou přihlášenou část, řešenou přes databázi. A chci se tedy zeptat, jak udělat, aby ten session $_SESSION["cart"] spadal pod určitou sekci (někde při při vytváření hádám)? Dokumentaci sem si četl, ale všude byly jen proměnné, ne globální session.