Autor | Zpráva | ||
---|---|---|---|
Camo Profil |
#1 · Zasláno: 16. 9. 2015, 00:58:41
Zdravím vás,
prosím vás vie mi niekto vysvetliť, ako by som mohol predĺžiť session z browsera? Aby ma po 20 minútach neodhlásilo. Skúšal som to cez odoslanie ajaxového requestu, ale zdá sa že to nefunguje. Vie niekto ako na to? |
||
blaaablaaa Profil |
#2 · Zasláno: 16. 9. 2015, 08:51:44
Camo:
"ale zdá sa že to nefunguje" ... co to znamena? Proc by nemelo fungovat, v nejakem intervalu posles na server jakykoliv dotaz (a ve skriptu na serveru zavolas session_start()). |
||
Camo Profil |
Je to robené v Nette a ten Ajax vyzerá takto:
setInterval( function() { $.ajax({ type: 'POST', url: {link :Helper:default}, accepts : 'json', complete: function( jqXHR ) { if( jqXHR.status == 200 ) console.log( jqXHR.responseJSON.message ); else alert( 'Za niekoľko sekúnd budete automaticky odhlásený z dôvodu nečinnosti. Ak sa tomu chcete vyhnúť refrešnite stránku.' ); } }); }, 1000 * 60 * 19 ); Ten Helper presenter vyzerá: public function renderDefault() { $this->sendJson( ['message' => 'Session was extended'] ); } |
||
blaaablaaa Profil |
#4 · Zasláno: 16. 9. 2015, 15:32:48
A kdyz to budes pingovat treba po 5 minutach?
|
||
Camo Profil |
#5 · Zasláno: 16. 9. 2015, 15:36:40 · Upravil/a: Camo
blaaablaaa:
Neviem. Aký je rozdiel medzi 19 a 5? Phph.ini má session.gc_maxlifetime = 1440 a je tam ešte direktíva session.cache_expire = 180 ktorá zatiaľ neviem čo znamená... Hmm, keď je ten interval kratší tak to síce vracia status 200, ale po 24 minútach som aj tak odhlásený, takže session sa nepredĺži :( |
||
Davex Profil |
#6 · Zasláno: 16. 9. 2015, 23:19:35
Pokud ti session skončí pokaždé po 24 minutách, tak se data nejspíš mažou nezávislým procesem přímo na serveru. Kdyby to záleželo na PHP, tak tam je ve standardním nastavení 1% pravděpodobnost smazání session. Zkus prodloužit
session.gc_maxlifetime (1440 vteřin je 24 minut) a session data ukládat jinam než do výchozího adresáře pomocí session.save_path .
|
||
Camo Profil |
#7 · Zasláno: 17. 9. 2015, 00:48:34
Davex:
To s tým mazaním dát som nepochopil. Veď každé volanie session_start() by malo oživiť platnosť session nie? Tak si to predstavujem ja. Samozrejme som sa aj ja dočítal o session garbage collectore a o 1% pravdepodobnosti zmazania, ale nebudem sa tváriť, že tomu rozumiem. Ak mi to vie niekto vysvetliť tak to ma naozaj poteší. |
||
Davex Profil |
#8 · Zasláno: 17. 9. 2015, 20:46:45
Camo:
„Veď každé volanie session_start() by malo oživiť platnosť session nie?“ Tady je možná důležité vědět, jak probíhá to „oživení“ session. Většinou to znamená pouze aktualizaci času poslední změny souboru se session, pokud je uživatel na webu aktivní. Nevím, jak to probíhá u jiných způsobů ukládání session dat (memcache, redis apod.) Když se potom bude na serveru spouštět cronem skript, který bude staré session soubory mazat podle času jejich vytvoření, tak se smažou dřív. Na některých Linuxových distribucích bývá obvyklé, že se mažou dvakrát za hodinu, takže ke smazání může dojít někdy mezi 24 až 54 minutami od vytvoření session. |
||
Camo Profil |
V session problém zdá sa nieje. Session premenné normálne fungujú. Myslím si, že pes je zakopaný niekde v Nette autentizácii. Podmienka $this->user->isLoggedIn() vracia false.
|
||
Camo Profil |
#10 · Zasláno: 18. 9. 2015, 02:51:50
Tak nakoniec som mal zle nastavenú expiráciu pri logine. Miesto
$user->setExpiration(0, TRUE); $user->setExpiration("30 minutes", TRUE); |
||
Alphard Profil |
#11 · Zasláno: 18. 9. 2015, 09:45:06
Camo:
„Nakoniec aj ten Ajax bude asi zbytočný.“ Tomu nerozumím. Ajax je tam od toho, aby prodlužoval expiraci, když uživatel nic nedělá, ale má stranku otevřenou na pozadí. Aspoň tak jsem tomu rozuměl a to jediné dává smysl. Oprava popsaná v [#10] tento úkol nenahradí. (Možné zjednodušení by bylo nepoužívat přímo ajax, stačilo by načíst php stránku přes load obrázku, ale když už to máte...) |
||
Camo Profil |
#12 · Zasláno: 18. 9. 2015, 23:53:32
Alphard:
Životnosť session sa dá nastaviť nie? Ak mám v config.neone nastavenú session na 14 dní, tak neviem ale predpokladám, že Nette to niekde nastavuje cez ini_set('session.gc_maxlifetime', 14 * 24 * 60 * 60); Aj keď je pravda, že som nič podobné v Nette nenašiel. Dnes som to skúšal bez toho ajaxu a fungovalo to. Neviem teda či to bolo preto, že ten garbage collector ešte session nezmazal, alebo že to je správne nastavené. Stále mám z toho bordel v hlave. |
||
Alphard Profil |
#13 · Zasláno: 19. 9. 2015, 00:26:15
Jestli od začátku stačí prodloužit maxlifetime, tak celý ten ajax byl jen (ne moc dobrý) workaround. Potom samozřejmě pryč s ním a relevantní je [#8] Davex. Potom byl ale špatně položený už první dotaz. Otázka měla znít, jak prodloužit trvání session, bez toho dodatku „přes browser“.
Není tady dost informací na detailní posouzení stavu. |
||
Camo Profil |
Alphard:
Pred tým mi to hádzalo ešte inú chybu a nevedel som kde je problém. Díky všetkým za pozornosť. |
||
Časová prodleva: 9 let
|
0