Náhodné odhlášení uživatele

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

Mám modulární aplikaci(Front/Admin) na Nette 2.2.7, v případě přihlášení a práce v Admin modulu se semtam-podle dosud zjištěných situací naprosto náhodně odhlásí uživatel. Session zmizí, objevím se s „not logged“ na přihlašovací stránce do adminu. U starších webů založených na stejné aplikaci se to pokud vím nestává a zdá se to být čistě back-end problém(přihlašování je oddělené, zvláštní tabulky s daty, dokonce až tak, že front-end používá Doctrine, zatímco v adminu jsou useři přes Dibi).

Session má nastavenou výchozí expiraci na +7 days v neonu a pro admin přihlášení je upravená přes setExpiration na buď 7 dní při zaškrnutí „zůstat přihlášen“, nebo na 4 hodiny bez zaškrnutí checkboxu.

V logu nette se nezachytává žádná chyba, nebo min. žádná, která by jakkoliv týkala back-endu. Logy ze serveru mám 1-den zpětně, aktuální sem ještě neviděl, ale z předchozího dne ani v nich nebylo nic mě podezřelého.

Snažil jsem se to jakkoliv nasimulovat a neúspěšně, ale jednou mě to třeba odhlásilo prostě při kliknutí na odkaz odevírající editaci položky(normální link přes presenter:edit id=>$item->id), potom to třeba 50× tu editaci této i jiných položek normálně otevřelo bez odhlášení.

Jediná změna, kterou se aktuální verze aplikace v adminu liší je, že běží na https, což už nicméně bylo vyzkoušeno i dříve a z předchozího webu podobné chování pozorované nemám(což může jen znamenat, že si toho nikdo nevšiml, ale je to už nějakej pátek).

Https je zařízené nastavením Route::SECURED k routám, u session je zapnuto cookie_secure: true, v htaccess je přesměrování na https a na začátku bootstrapu je vložen tenhle kód nalezený jinde tady na fóru(problém s reverzní proxy před vms-active24)

<?php
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
    if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' && isset($_SERVER['SERVER_PORT']) && in_array($_SERVER['SERVER_PORT'], [80, 82])) { // https over proxy
        $_SERVER['HTTPS'] = 'On';
        $_SERVER['SERVER_PORT'] = 443;
    } elseif ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'http' && isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 80) { // http over proxy
        $_SERVER['HTTPS'] = 'Off';
        $_SERVER['SERVER_PORT'] = 80;
    }
}
?>

Nevím, jestli něco z tohoto může mít spojitost. Vůbec mě nenapadá, co by mohlo občasné, náhodné výpadky session způsobovat, nesetkali jste se někdo s něčím podobným?

ZahorskyJan
Člen | 55
+
0
-

@d@rkwolf Platnost session v nette aplikaci je jedna věc a druhá věc je, jak se k session chová server. Standardně existuje nějaký cron, který se pravidelně spustí a smaže všechny session soubory, co jsou starší (last touch) než časový interval nastavený někde v php.ini

Takže i když u session v nette je +14 dnů a cron to dělá po kratším intervalu, tak těch 14 dnů nebude nikdy fungovat.

d@rkWolf
Člen | 163
+
0
-

S tou platností by problém být neměl, savePath pro sessions mám v neonu nastavenou takto:
savePath: %tempDir%/sessions

A pokud můžu soudit z pohledu do té složky, tak tam ty session soubory těch až 7 dní staré jsou.

Michal Hlávka
Člen | 190
+
0
-

Nemuze byt podle tebe chyba tam, kde zjistujes jestli uzivatel existuje, jestli je opravnenej v tehle casti byt, jestli session existuje a dalsi veci co ze toho muzou tykat?