Autor Zpráva
Suta
Profil
Níkdy jsem netestoval, vždy jsem naivně věřil, že platí všude deklarované tvrzení "zavřením hlavního okna prohlížeče se můžete spolehnout na zrušení SESSION proměnné".

V php.ini je nastaveno:
session.cookie_lifetime = 0
gc_maxlifetime = 1440

Včera po několikerém testování v Chrome a Mozille jsem dospěl do situace, kdy session existovala po zavření prohlížečů a jejich opětovném otevření.

Je tato situace možná? Jaká může být příčina?

Jediné, co mi zbylo pro nalezení problému je:

1. Flash, který na stránce spouštím - ten volá určitý php script a v něm startuje session_start(). Je možné, aby on udržoval připojení po zavření prohlížeče?
2. Nastavení v prohlížeči na zapamatování si naposledy otevřených záložek, které používám. Na druhou stranu však vždy zavírám hlavní okno a tím všechny záložky, takže by to vliv mít nemělo.

Prosím o jakoukoliv radu. Ještě podotknu, že výše uvedené chování se vyskytuje pouze na vlastním serveru, na localhostu je session zrušena vždy.
ShiraNai7
Profil
Podle dokumentace by mělo nastavení na "0" skutečně fungovat tak, jak popisuješ.

session.cookie_lifetime specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the browser is closed." Defaults to 0. See also session_get_cookie_params() and session_set_cookie_params().

Nepřepisuje se někde v kódu tato hodnota některou z těchto funkcí?
~ session_set_cookie_params()
~ ini_set()
Suta
Profil
ShiraNai7:
Nepřepisuje, aktuálně prověřeno.
ShiraNai7
Profil
Zkus pročíst: http://www.sitepoint.com/forums/showthread.php?717842-PHP-Session-does-not-expire-on-closing-browser
Suta
Profil
ShiraNai7:
Pročítal jsem již dopoledne, musím řádně otestovat uvedené postřehy. V každém případě je výše uvedené chování zajímavým zjištěním vzhledem k bezpečnosti uživatele..
ShiraNai7
Profil
Někde musí být chyba, ať už v nastavení prohlížeče nebo něčem na serveru - mi se PHP session ukončují (respektive cookie se smaže) normálně při zavření prohlížeče, pokud je platnost cookie na 0.
Suta
Profil
Musím po roce znovu otevřít toto téma. Nyní se jedná o jiný server, jinou webovou stránku, problém s platností session proměnných však zůstává.

Upřesním, že vytváření session probíhá skrze ajaxové volání. Konkrétně takto:

1. Nejedná se o klasickou webovou stránku, ale o speciální aplikaci. Celý web je tvořen javascriptem a obsah načítán technologií AJAX.

2. Při prvotním načtení webu (resp. F5) je spuštěn prvotní (inicializační) ajax request. Ten na serveru (na pozadí) ověřuje přihlášení uživatele. Pokud přihlášen je, pak server tuto informaci vrátí, prohlížeč informaci přijme a okamžitě odesílá další ajax požadavek na načtení obsahu, k němuž má přihlášený uživatel přístup. V případě, že uživatel přihlášení není (session neexistuje), pak prohlížeč opět tuto informaci obdrží a namísto načtení obsahu zobrazí přihlašovací formulář. Jen podotknu, že samotné přihlášení (odeslání přihlašovacích údajů) probíhá opět pomocí AJAXu (tedy script vytvářející session je spouštěn na pozadí).

3. Pokud večer zavřu celý prohlížeč, druhý den přijdu, a jsem stále přihlášen. Tj. session stále existuje.

Myslím si tedy, že problém je skutečně díky volání scriptu na pozadí pomocí ajaxu. Pochopitelně všechny informace uvedené v předchozích příspěvcích ohledně správného nastavení session v php.ini atd. jsou nastaveny správně.

Netuším, jak problém s platností session vyřešit (tedy kromě způsobu, kdy bych při přihlášení uložil do session také čas přihlášení a poté vždy kontroloval čas posledního dotazu na server, tento způsob by pochopitelně fungoval).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0