PHP: Proč byste neměli spouštět session_start() automaticky na všech stránkách?
Nejrůznější PHP tutoriály často radí, abyste na začátku skriptů zavolali session_start(). Bez něj totiž nemůžete pracovat se sessions. To je samozřejmě pravda. Často v návodech chybí důležité upozornění – sessions byste měli nastartovat pouze v případě, kdy s nimi opravdu potřebujete pracovat. Na grafech můžete vidět, jak se díky tomu sníží zátěž serveru, pokud se tím budete řídit.
Jestli používáte sessions pro přihlašování, tak byste je měli nastartovat:
- v případě, kdy se uživatel právě přihlašuje, tedy kdy uživatel zadal a odeslal přihlašovací údaje a vaše obslužná metoda úspěšně provedla ověření zadaných údajů.
- Anebo u právě přihlášeného uživatele, což poznáte podle přítomnosti cookie, která má session na starosti – typicky to poznáte podle existence proměnné:
$_COOKIE['PHPSESSID']
V ostatních případech nastartovat sessions je nejen zbytečné a nežádoucí. U běžných návštěvníků by server musel neustále generovat a ukládat session data, které vůbec nepotřebujete.
Session data jsou ve výchozím nastavení PHP obyčejné soubory na disku. Pokud skript začne se session pracovat, tak zamkne session soubor pouze pro sebe a další skript, který chce pracovat se stejnou session (tedy session souborem), musí počkat, než jej ten předchozí odemkne.
Zápis do session souborů se standardně ukončí s ukončením skriptu, ale můžete to uspíšit zavoláním session_write_close() – což byste měli udělat vždy, když už se session nebudete pracovat. Nutno dodat, že pole $_SESSION bude dostupné pro čtení i po ukončení sessions.

