Debug bar: Cannot set cookie

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

PHP 5.3.10
Nette 2.0.1

Dneska mi laděnka vyhodila chybu přímo v panelu (Error: Nette\Security\Diagnostics\UserPanel):

exception 'Nette\InvalidStateException' with message 'Cannot set cookie after HTTP headers have been sent (output started at C:\Server\www\Netaps\website\temp\cache\_Nette.FileTemplate\_Default.default.latte-872af1c0936ff9258ab7282e5894a23d.php:110).' in C:\Server\www\Netaps\website\libs\Nette\Http\Response.php:288
Stack trace:
#0 C:\Server\www\Netaps\website\libs\Nette\Http\Session.php(583): Nette\Http\Response->setCookie('PHPSESSID', '1m55piaiej8b4ko...', 0, '/', '', false, true)
#1 C:\Server\www\Netaps\website\libs\Nette\Http\Session.php(139): Nette\Http\Session->sendCookie()
#2 C:\Server\www\Netaps\website\libs\Nette\Http\SessionSection.php(63): Nette\Http\Session->start()
#3 C:\Server\www\Netaps\website\libs\Nette\Http\SessionSection.php(111): Nette\Http\SessionSection->start()
#4 C:\Server\www\Netaps\website\libs\Nette\Http\UserStorage.php(190): Nette\Http\SessionSection->__get('identity')
#5 C:\Server\www\Netaps\website\libs\Nette\Http\UserStorage.php(76): Nette\Http\UserStorage->getSessionSection(false)
#6 C:\Server\www\Netaps\website\libs\Nette\Security\User.php(131): Nette\Http\UserStorage->isAuthenticated()
#7 C:\Server\www\Netaps\website\libs\Nette\Security\Diagnostics\templates\UserPanel.tab.phtml(8): Nette\Security\User->isLoggedIn()
#8 C:\Server\www\Netaps\website\libs\Nette\Security\Diagnostics\UserPanel.php(45): require('C:\Server\www\N...')
#9 C:\Server\www\Netaps\website\libs\Nette\Diagnostics\Bar.php(62): Nette\Security\Diagnostics\UserPanel->getTab()
#10 C:\Server\www\Netaps\website\libs\Nette\Diagnostics\Debugger.php(369): Nette\Diagnostics\Bar->render()
#11 [internal function]: Nette\Diagnostics\Debugger::_shutdownHandler()
#12 {main}

Na řádku, kde začíná výpis, mám toto:

<span class="date">{!strftime('%d<br />%b', strtotime($status->created_at))}</span>

což nette přeloží na toto:

<span class="date"><?php echo strftime('%d<br />%b', strtotime($status->created_at)) ?></span>

Před i po tomto řádku jsou další výstupy (echo), které by měly odeslání headers ovlivnit stejně. Pokud obsah řádku v šabloně odstraním, chyba se posune na další řádek šablony. Cookies ani autentizaci v aplikaci nepoužívám. Vidíte někde možnou příčinu?
Díky.

Editoval Fanda (19. 3. 2012 9:06)

David Grudl
Nette Core | 7445
+
0
-

Problém je v tom, že se session nastartuje pozdě. Nastav v config.neon u session hodnotu autoStart: smart. Bude defaultní v Nette 2.0.2.

Bumerank
Člen | 30
+
0
-

pokouším se zprovoznit projekt na hostingu a komponenta gridito, resp. její flashMessage vyhodí chybu Nette\InvalidStateException

Cannot set cookie after HTTP headers have been sent na tomto řádku:

<?php
$grid->flashMessage("...");
?>

když jsem config.neon nastavil session: smart, tak to přestalo dělat a funguje to, ale pouze v Google Chrome – Firefox má ten problém stále…

Editoval Bumerank (6. 5. 2012 21:38)

Jan Endel
Člen | 1016
+
0
-

Pokud si stáhneš celé nette najdeš ve složce tools code-checker, tím svoji aplikaci projeď je možné že je někde nějaký zapomenutý znak :-).

Bumerank
Člen | 30
+
0
-

code-checker našel a opravil pouze pár zapomenutých ukončovacích značek „?>“ a dělá to stále to samé :(

..navíc jsem teď přišel na problém, který možná s Nette nesouvisí – v jedné funkci volám get_headers($url) a i když cílovou URL nelze načíst, tak mi to pouze na hostingu vrátí HTTP kód 200

Editoval Bumerank (6. 5. 2012 22:52)

Bumerank
Člen | 30
+
0
-

pro doplnění:

  • PHP 5.3.10–1~dotdeb.1
  • Apache
  • Nette Framework 2.0 (revision 013c8ee released on 2012–02–03)

..podle Requirements Checkeru splňuje nejen minimální, ale úplně všechny požadavky na provoz Nette
vyzkoušena i aktualizace Nette – bez úspěchu

Editoval Bumerank (6. 5. 2012 23:36)

Bumerank
Člen | 30
+
0
-

tak jsem to vyřešil voláním komponenty v beforeRenderu (viz. příspěvek ) ..akorát nechápu, jak je možné, že po úpravě tímto stylem pouze v jednom z presenterů, se stejným problémem, to začalo fungovat i u ostatních presenterů