Otázky k třídě User , sliding expirace, session

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

Ahoj, mám nějaké otázky k třídě user?

  1. Jde nějak získat info o uživateli jinak než $cont->session->getSection('Nette.Web.User/') (totiž User::getSessionSection je protected) například chci vědět authTime,
  2. jde nějak nastavit fixní expirace (ne-sliding)? Dám li user::setexpiration(1307657421), tak se mi stane, že user je i po osudné době přihlášen a expireDelta je záporné. (toto způsobí, že zůstane přihlášený nadále) Defatko to znamená, že delta se nastaví na zápornou hodnotu a user se nikdy neodhlásí
  3. na jakém místě je správné volat user::setExpiration() a co to může způsbit za chyby

Editoval bojovyletoun (10. 6. 2011 2:12)

Filip Procházka
Moderator | 4668
+
0
-

Info o uživateli je jeho identita a ta je přístupná přes $presenter->context->user->getIdentity(). Do Identity si můžeš klidně uložit i čas přihlášení.

V examplech je User::setExpiration() volané hned po přihlášení, ale mělo by to fungovat kdykoliv, kdy půjdou ještě odesílat hličky (startup, action, handle).

bojovyletoun
Člen | 667
+
0
-

K bodu 2) Možná by stálo za to přidat další reason odhlášení: EXPIRED. Stačilo by defacto zkopírovat
kód od podmínky a smazat expireDelta>0… Ikdyž tak jednoduché to nebude. I kdyz tady jsou 2 případy (kód by využil toto ): 1) zadám konkrétní datum – fixní čas expirace, 2) počet sekund – sliding expirace

Filip Procházka
Moderator | 4668
+
0
-

Problém je, že nemůžeš určit, jestli jsi expiroval, když jsi expiroval, protože už nemáš přístup do té session :)

David Grudl
Nette Core | 8218
+
0
-

bojovyletoun napsal(a):

1. Jde nějak získat info o uživateli jinak než $cont->session->getSection('Nette.Web.User/') (totiž User::getSessionSection je protected) například chci vědět authTime,

Nejde, není to součástí API.

2. jde nějak nastavit fixní expirace (ne-sliding)? Dám li user::setexpiration(1307657421), tak se mi stane, že user je i po osudné době přihlášen a expireDelta je záporné. (toto způsobí, že zůstane přihlášený nadále) Defatko to znamená, že delta se nastaví na zápornou hodnotu a user se nikdy neodhlásí

Nulová (nebo záporná) expirace znamená: neodhlašovat. Fixní expirace nastavit nejde – nebyl by problém ji implementovat, ale nenapadá mě důvod, k čemu by to bylo dobré.

3. na jakém místě je správné volat user::setExpiration() a co to může způsbit za chyby

Mělo by se to dat volat kdykoliv, jen jelikož to pracuje se session, musí buď session existovat, nebo nesmí být ještě odeslané HTTP hlavičky.