automaticke odhlaseni pomoci ajaxu
- tomasnikl
- Člen | 137
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
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
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..:
- expiraci uzivatele nastavim na 10 minut
- kazdych 30 sekund provadim ajax request kvuli refreshi dat na strance. Tento request si vyzaduje prihlaseneho uzivatele, jelikoz pracuje s jeho daty
- kazdych 10 min a par sekund provedu ajax request s dotazem, zda je uzivatel prihlaseny
a co se stane?
- expirace konci za 10 min
- kazdych 30 sekund se expirace navysi zpet na 10 min
- 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
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
- Vojtěch Dobeš
- Gold Partner | 1316
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)