Cannot send session cache limiter – headers already sent
- Honza Marek
- Člen | 1664
Tohle mi vyrábí aplikace po přenesení na hosting (Onebit), nevíte někdo, co to jako je?
Fatal error: Uncaught exception ‚InvalidStateException‘ with message ‚Cannot send session cache limiter – headers already sent (output started at /hosting/www/janmarek.net/rsdemo/app/temp/cache-Nette.Template%007c5140a7e13a58e3b2bf909e2a4c32302.%40layout.phtml.php:6)‘ in /hosting/www/janmarek.net/rsdemo/libs/Nette/Web/Session.php:112 Stack trace: #0 /hosting/www/janmarek.net/rsdemo/libs/Nette/Web/Session.php(348): Session->start() #1 /hosting/www/janmarek.net/rsdemo/libs/Nette/Web/User.php(253): Session->getNamespace(‚Nette.Web.User/‘) #2 /hosting/www/janmarek.net/rsdemo/libs/Nette/Web/User.php(129): User->getSessionNamespace(false) #3 /hosting/www/janmarek.net/rsdemo/app/temp/cache-Nette.Template%007c5140a7e13a58e3b2bf909e2a4c32302.%40layout.phtml.php(7): User->isAuthenticated() #4 /hosting/www/janmarek.net/rsdemo/libs/Nette/Loaders/LimitedScope.php(70): include(‚/hosting/www/ja…‘) #5 /hosting/www/janmarek.net/rsdemo/libs/Nette/Templates/Template.php(211): LimitedScope::load(‚/hosting/www/ja…‘, Array) #6 /hosting/www in /hosting/www/janmarek.net/rsdemo/libs/Nette/Web/Session.php on line 112
- romansklenar
- Člen | 655
Onebit uz ma povolenou funkci ini_set,
ale i tak bych tam dal posledni revizi,
pak zapni logovani, abys vyjoucil to,
ze ti nejaka noticka posila vystup do prohlizece
nez se ti podari prihlasit toho uzivatele.
- Jan Tvrdík
- Nette guru | 2595
Můj tip: Přidej do BasePresenteru do funkce beforeRender()
aktivaci session:
// Zapnutí session (pokud neběží)
if (!Environment::getSession()->isStarted()) {
Environment::getSession()->start();
}
- Honza Kuchař
- Člen | 1662
Odesíláš HTTP hlavičky, když už jsi poslal začátek obsahu stránky. Takže si zkontroluj BOM na začátku souboru. Když do PHPka v UTF-8 vlezeš notepad.exe, tak to většinou skončí takhle. Já na odstranění BOM používám toho: (nemůžu ted najít zdroj odkud jsem to stáhl)
<?php
$dir = '.';
function fix_bom($fn) {
$file = fopen($fn, 'rb+');
if ($file) {
$bom = fread($file, 3);
if ($bom == ( chr(0xEF) . chr(0xBB) . chr(0xBF) )) {
$data = '';
while (!feof($file)) $data .= fread($file, 8192);
rewind($file);
fwrite($file, $data);
}
fclose($file);
}
}
$mydir = opendir($dir);
while ($fn = readdir($mydir)) {
if (substr($fn, -4) == '.php') {
fix_bom($fn);
}
}
→ třeba to někomu pomůže. Když jsem mi notepad přidal do toho souboru BOM hlavičku, tak jsem se poprvé dost divil. ;) To už ale asi znáš…
Nicméně si myslím, že by mělo pomoct to co psal Honza tady přede mnou. (když se jedná o session)