PHP Warning: session_start(): Cannot send session cache limiter
- tomaass
- Člen | 74
Ahoj,
mám webovou prezentaci na produkčním serveru a pravidelně dostávám emailem notifikaci:
[2013–08–05 23:15:08] [2013–08–05 23–15–08] PHP Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home/www_root/xyz/app/temp/cache/_Nette.FileTemplate/_Default._layout_wide.latte-70015980450afc03ef37584404c0e082.php:74) in /home/www_root/xyz/libs/Nette/nette.min.php:4729 @ http://www.xyz.cz/neco
Samozřejmě nikde nic před zahájením sešny nevypisuju. Na fóru jsem se dočetl, že za to může BOM. Všechny soubory projektu jsem tedy projel code-checkerem a nechal opravit a přenesl na produkční server. Také jsem smazal cache. Chyba v nezměněné podobě přetrvává a já vůbec nevím, čím a kde to vzniká. Ani nevím, jestli návštěvník vidí to co má, nebo mu stránky havarují.
Editoval tomaass (6. 8. 2013 11:39)
- tomaass
- Člen | 74
frosty22 napsal(a):
Uvádíš, že nikde nic před zahájením session nevypisuješ, čili ty startuješ session ručně? Pokud ano, zkus nastavit v configu na „smart“.
Sešnu nestartuju ručně. Nechávám to na nette. Tak doufám, že jí startuje ještě před výstupem šablony :)
session:
autoStart: smart
to mám
Editoval tomaass (6. 8. 2013 12:03)
- tomaass
- Člen | 74
vvoody napsal(a):
No keď ti chodí mail tak ten mail asi posiela nette čiže tu notice spracúva nette a mal by ju aj logovať ako ladenku do súboru v logs adresári, skús ho pohľadať.
mám tam jenom stoletý exceptiony. Nic novýho. Ten mail mi chodí asi každý druhý den, ale v logu nic. Ani v error logu.
- frosty22
- Člen | 373
Tak to je ono =) Pokud se ti před stolety objevila stejná chyba, tak se vytvořit unikátní hash, který je v tom názvu exception-XX-XX-YYYYYYYY a pokud se objeví stejná chyba tak nette prvně kontroluje, zda-li už není zalogovaná a vytvoří z ní hash, který ty už tam asi máš.
Doporučení – nenechávat staré exception ve složce – projít je, vyřešit a smazat =) Jinak v tomto případě je smaž či stáhni a sám uvidíš že se objeví.
- tomaass
- Člen | 74
frosty22 napsal(a):
Tak to je ono =) Pokud se ti před stolety objevila stejná chyba, tak se vytvořit unikátní hash, který je v tom názvu exception-XX-XX-YYYYYYYY a pokud se objeví stejná chyba tak nette prvně kontroluje, zda-li už není zalogovaná a vytvoří z ní hash, který ty už tam asi máš.
Doporučení – nenechávat staré exception ve složce – projít je, vyřešit a smazat =) Jinak v tomto případě je smaž či stáhni a sám uvidíš že se objeví.
Aha, OK, děkuju. Já sem je přávě předchvílí smazal, takže už je po nich. škoda. Ale zase budou ;)
Díky. A když budou a nepovede se mi to odhalid, tak sem napíšu i se screenama. Zatim dík
- daniel.mejta
- Člen | 21
tomaass napsal(a):
Ahoj,
mám webovou prezentaci na produkčním serveru a pravidelně dostávám emailem notifikaci:
[2013–08–05 23:15:08] [2013–08–05 23–15–08] PHP Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home/www_root/xyz/app/temp/cache/_Nette.FileTemplate/_Default._layout_wide.latte-70015980450afc03ef37584404c0e082.php:74) in /home/www_root/xyz/libs/Nette/nette.min.php:4729 @ http://www.xyz.cz/neco
Samozřejmě nikde nic před zahájením sešny nevypisuju. Na fóru jsem se dočetl, že za to může BOM. Všechny soubory projektu jsem tedy projel code-checkerem a nechal opravit a přenesl na produkční server. Také jsem smazal cache. Chyba v nezměněné podobě přetrvává a já vůbec nevím, čím a kde to vzniká. Ani nevím, jestli návštěvník vidí to co má, nebo mu stránky havarují.
Zkus vymazat z .php souborů na konci ?>, zkontroluj jestli před session_start() nemáš nějaké echo, odstraň BOM, zkontroluj jestli ti .php soubory nezačínají řádkem/mezerou/čímkoliv jiným než <?php
- frosty22
- Člen | 373
Uváděl že to projel code-checkrem, takže by tyhle problémy mít neměl https://doc.nette.org/cs/code-checker
- tomaass
- Člen | 74
Tak, pánové:
Chyba mi mailem přišla znovu. V logu není vůbec nic = žádný výstup laděnky, ani žádný záznam. Hláška je pořád stejná. Liší se jen akce presenteru.
daniel.mejta> ano, tydle začátečnické věci jsem vechny už dávno udělal a sešnu nestartuju ručně. PHP mám všude bez ukončujících značek.
- leninzprahy
- Člen | 150
S podobným problémem jsem se setkal.
Tehdy to bylo způsobeno tím, že se session sama nenastartovala a když se
začal vykreslovat zabezpečený formulář (->addProtection()
),
zkoušel si do ní uložit svůj token, ale už bylo pozdě. Myslím že pomohlo
nastartovat session ručně (session_start()
někde v bootstrapu).
Ale je to už dloho, tuším ještě nette 0.9.
Mimochodem, jakou verzi nette používáš?
- tomaass
- Člen | 74
leninzprahy napsal(a):
S podobným problémem jsem se setkal.
Tehdy to bylo způsobeno tím, že se session sama nenastartovala a když se začal vykreslovat zabezpečený formulář (->addProtection()
), zkoušel si do ní uložit svůj token, ale už bylo pozdě. Myslím že pomohlo nastartovat session ručně (session_start()
někde v bootstrapu). Ale je to už dloho, tuším ještě nette 0.9.Mimochodem, jakou verzi nette používáš?
No, můžu to zkusit. Zrovna to ty chyby hází na stránkách, kde ani formuláře nejsou. Jsou to pouze „statické“ stránky. Verze mého nette je 2.0.10 bez namespaců.
- David Grudl
- Nette Core | 8233
Automatické startování session se dělá pomocí
autoStart: yes
, smart
je taková divná
výchozí volba.