Cannot send session cache limiter – headers already sent

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

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

Jod
Člen | 701
+
0
-

Zmazal si cache? :)

Honza Marek
Člen | 1664
+
0
-

ano ;)

romansklenar
Člen | 655
+
0
-

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
+
0
-

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
+
0
-

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)

mprokes
Člen | 10
+
0
-

Pokud používáte PSPad, tak stačí v nastavení vypnout „Ident. byty v kódování UTF8“ a inkriminovaný soubor znovu uložit. (Samozřejmě se nehodí pro vetší množství souborů :) )