automaticke odhlaseni pomoci ajaxu

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

Zdravim,

nevim si rady s jednou veci a to je automaticke odhlaseni uzivatele… tady na foru jsem muj problem zatim nenasel tak zkusim polozit novou otazku.

Dejme tomu, ze expiraci prihlaseni uzivatele nastavim na 10 minut. Kazdou 1 minutu posilam ajax request na nejaky signal a ptam se, zda je uzivatel prihlasen.. no jo, jenze vzdy se mi vratil true, jelikoz uzivatel "provedl nejakou akci (odeslal ajax request) a tim padem se navysilo tech 10 minut), takze ozivatele timto nikdy neodhlasim, ale akorat mu zarucim to, ze jeho prihlaseni nikdy neexpiruje.

Da se nejak zjistit datum a cas posledni aktivity uzivatele a jakou akci provedl? Nebo jak tento problem resi? Potrebuju ajax request idealne odesilat tak, aby to nette nebralo jako akci uzivatele a neprodluzovala session.

dekuji za rady.

t.

Oli
Člen | 1215
+
0
-

Asi to nebude best practice, ale mohlo by to fungovat.

Pokud by jsi nastavil js interval na stejnou hodnotu jako mas expiraci v nette a po uplynuti toho intervalu uzivatele presmeroval napr na prihlasovaci formular tak v okamziku presmerovani nette zjisti, ze uzivatel uz neni prihlasen a bude po nem prihlaseni vyzadovat. Tim by jsi mohl dosahnout pozadovaneho chovani…

tomasnikl
Člen | 137
+
0
-

Ano, potrebuju uzivatele po 10ti minutach neaktivni cinnosti presmerovat na prihlasovaci formular.

tohle mi pred chvili taky docvaklo… na co provadet request s dotazem o tom, zda je uzivatel prihlaseny casteji nez je doba expirace… kdyz mam expiraci dejme tomu na 10 minut a ja se kazdych 10 minut a par sekund po tom budu ptat, jestli je uzivatel jiz prihlaseny, tak mi to vrati false.. HEUREKA.. ono to je i logicke, jelikoz kdyz uzivatel 10minut na strance nic nedela tak se odhlasi.. na co ptat casteji nez onech 10 minut ze?

jenze jsem objevil jeste dalsi problem.. mam X stranek, ktere na pozadi prubezne ajaxem komunikuji a obnovuji nejaka data v tabulkach, ktere uzivatel vidi.. to se deje treba kazdych 30 sekund.. a tady nastava mnou popsany problem vyse..:

  1. expiraci uzivatele nastavim na 10 minut
  2. kazdych 30 sekund provadim ajax request kvuli refreshi dat na strance. Tento request si vyzaduje prihlaseneho uzivatele, jelikoz pracuje s jeho daty
  3. kazdych 10 min a par sekund provedu ajax request s dotazem, zda je uzivatel prihlaseny

a co se stane?

  1. expirace konci za 10 min
  2. kazdych 30 sekund se expirace navysi zpet na 10 min
  3. po 10ti min sice provedu dotaz zda je uzivatel prihlaseny, ale vzdy se mi vrati true jelikoz pred 30ti sekundami predchozi ajax navysil expiraci opet na 10 min.

→ vznika tim nekonecna smycka, kdy uzivatele nikdy nejsem schopen odhlasit :o)

Bohuzel jsem se radoval predcasne, problem opet pretrvava

navrh reseni?
Napadlo me jeste tohle. Vykaslat se na jakykoliv ajax request s tim, ze se budu ptat zda je uzivatel prihlaseny. Proste po 10ti minutach, kdy uzivatel na nic na strance neklikne ho presmeruju na akci, ktera ho odhlasi a z te uz bude presmerovan na prihlasovaci formular. Jak jednoduche.. asi to tak zatim udelam, ale porad mi lezi v hlave ten problem s AJAXEM popsany vyse… jak by se resil tento pripad (dejme tomu, ze ten ajax fakt chci pouzit)?

David Matějka
Moderator | 6445
+
0
-

Napadlo me jeste tohle. Vykaslat se na jakykoliv ajax request s tim, ze se budu ptat zda je uzivatel prihlaseny. Proste po 10ti minutach, kdy uzivatel na nic na strance neklikne ho presmeruju na akci, ktera ho odhlasi a z te uz bude presmerovan na prihlasovaci formular. Jak jednoduche..

a co kdyz uzivatel bude mit otevrenou tu stranku ve vice tabech, v jednom nebude aktivni a v druhem jo? a mas tu problem :)

asi bych to resil tak, ze bych si do session rucne ukladal cas posledni aktivity – samozrejme krome tech akci na kontrolu aktivity a obnovu. napada me nekolik moznosti, jak to vyresit, asi nejjednodussi – v tech ajaxovych requestech, co nechces logovat jako aktivitu, dat do url nejakej parametr – kod logujici aktivitu by si potom zkontrolovat (ne)pritomnost parametru

Oli
Člen | 1215
+
0
-

Nevim jestli to je mozne takhle odlisit, ale jestli to jde, tak bych pro ajax requesty vypnul klouzavou dobu prihlaseni. To me prijde jako nejlepsi reseni, ale nevim jestli je mozny :)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Viz https://forum.nette.org/…pomoci-ajaxu#…:

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í

David Grudl: 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é.

Jak vidno, vypnout klouzavou expiraci nejde. Možná by stálo za to otevřít pull request nebo alespoň na Githubu, buď bude přijat, nebo někdo v diskusi přijde s alternativním řešením.

Editoval vojtech.dobes (19. 8. 2013 9:26)