Uzavření a znovuotevření session
- mach2roman
- Člen | 22
Prosím o radu jak v nette korektně vyřešit uzavření a znovuotevření session. Dělám jakéhosi deamona, který z prohlížeče posílá pravidelně po 20sec ajaxový požadavek na spuštění zpracování. Pokud se na serveru zjistí, že se má provést určitý přepočet pak přepočet spustí. Problém je v tom, že některé přepočty trvají 30sec a déle (jsou to určité konverze dat databáze, které session nepotřebují).
Nyní před zavolání časově náročného přepočtu zavolám v prezentéru
$this->sessionContainer->close();
a jelikož po dokončení přepočtu potřebuji některé session proměnné modifikovat, tak session znovu otevřu
$container = $this->presenter->context;
$this->sessionContainer = $container->getService(‚session‘);
$this->sessionContainer->start();
Vše na první pohled funguje. Ale po nějaké době (od několika minut po několik hodin). dojde ke ztrátě session. Pokud zkusím časově méně náročné přepočty (aby se mě nehromadily požadavky) a zakontuji výše uvedené řádky, abych session nezavíral a znovu neotevíral tak nikdy ke ztrátě nedošlo.
Poradí někdo jak toto řešit?
- Jan Tvrdík
- Nette guru | 2595
@mach2roman: Nedochází ti náhodou k tomu, že běží dva skripty paralelně?
- mach2roman
- Člen | 22
No určitě běží, proto taky uzavírám session, aby se mohl spustit další ajaxový požadavek i když předchozí není ukončen. Předpokládám že pokud je session v držení jiného scriptu tak při znovuotevření se čeká až se zámek na session uvolní. Nikdy ale nemůže dojít ke spuštění totožného přepočtu (i když principiálně by to na session nemělo vliv).
- mach2roman
- Člen | 22
No stát by se to nemělo. Na serveru nikdo nedělá a běží tam jen ten jeden prohlížeč, který se sám ajaxově komunikuje.
- Jan Tvrdík
- Nette guru | 2595
@mach2roman: Když tam běží jen jeden prohlížeč, proč vůbec používáš session a ne obyčejný soubor nebo databázi?
- mach2roman
- Člen | 22
Session se dá říct že nepotřebuju, ale jelikož ke spuštění je
potřeba se zalogovat, tak nette session vždy nastartuje a tím ji zamkne a
pokud ji pak ručně neukončím tak se další skrit nespustí.
Otestoval jsem, že i když pouze session ukončím a znovu nenastartuju, tak
stejně po nějaké době dojde ke ztratě session. Pokud session během scriptu
neukončím tak se nikdy neztratí. Takže problém je zakuklen někde při
běhu scriptu, který ukončil session a druhý který session používá, ale
nedá se vysledovat nějaká pravidelnost. Někdy to běží několik hodin,
někdy jen 5 min.