Uzavření a znovuotevření session

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

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
+
0
-

@mach2roman: Nedochází ti náhodou k tomu, že běží dva skripty paralelně?

mach2roman
Člen | 22
+
0
-

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).

Majkl578
Moderator | 1364
+
0
-

Nemůže se ti stát, že se ti v tom mezičase přegeneruje (v jiném scriptu) session ID?

mach2roman
Člen | 22
+
0
-

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
+
0
-

@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
+
0
-

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.