Cannot send session cache limiter – headers already sent
- rezorcinol
- Člen | 25
Dobry den, mam problem s tady jiz znamou chybou „Cannot send session cache limiter – headers already sent“. Poprve kdyz mi nejaka akce hodila ladenku s touto chybou stacilo do BasePresenteru pridat, jak jiz tedy nekdo radil, toto:
<?php
...
protected function beforeRender()
{
if (!Environment::getSession()->isStarted())
Environment::getSession()->start();
}
...
?>
To na chvili to me potize vyresilo. Dnes vsak na me vybafla ladenka s touto chybou znovu. Call stack ukazuje na BasePresenter.php:
<?php
...
Line 14: {
Line 15: parent::startup();
Line 16:
Line 17: // bacause of IE 6 and 7
Line 18: $this->absoluteUrls = TRUE;
Line 19:
Line 20: $user = Environment::getUser();
Line 21: $this->template->isAuth = $user->isAuthenticated();
...
?>
Na radek 21, kde zjistuji, zda se uzivatel prihlasen. Znovu jsem tedy procital toto forum a nasel jsem radu pridat do bootsrap.php radek:
<?php
Environment::getSession()->start();
?>
Chyba se pri dane akci (prohlizeni detailu uzivatele) jiz neobjevila. Uz jsem si myslel, ze mam vyhrano, ale po kliknuti na logout, znovu ta sama chyba, znovu v BasePresenteru.php:
<?php
Line 73: public function actionLogout()
Line 74: {
Line 75: Environment::getUser()->signOut();
Line 76: $this->flashMessage('Byl jste odhlášen ze systému.');
Line 77: $this->redirect('Auth:login');
Line 78: }
?>
na radku 75 pri odhlasovani uzivatele. Co s timto uz opravdu nevim, muzete mi prosim poradit?
PS: Jeste by me zajimala jedna vec. Pri testovani na localhostu se tyto chyby vubec neprojevuji a aplikace funguje bezvadne, ladenka na me vybafne vzdy jen pokud stranky zkopiruji na server.
- rezorcinol
- Člen | 25
Jeste bych chtel dodat, ze ta druha chyba (pri logoutu) ma text:
Cannot regenerate session ID after HTTP headers have been sent.
- rezorcinol
- Člen | 25
Tak jsem tim skriptem projel vsechny soubory ve slozce presenters a models, ale nepomohlo. Co jsem se dival, tak soubory s presentery vzdy zacinaji timto:
3f3c 6870 (HEX)
- Tomik
- Nette Evangelist | 485
Použij černou šipku vpravo nahoře u Laděnky (Debug výpis výjimky), zobrazí se ti výstup, který byl odeslán, pokud to nebudou white-spaces, pak se dá určit, kde se to vypisuje, pokud to bíle znaky budou, pak máš buď někde BOM (viz David) nebo se ti tam dostanou bílé znaky na konci nějakého includovaného souboru:
V tom případě vyhoď ze všech souborů s příponou .php
poslední koncovou značku pro php ?>
– to zajistí, že by
se z includovaných souborů neměl na výstup dostat žádný bílý znak,
o kterém nevíš…
- rezorcinol
- Člen | 25
Opravdu stacilo odstranit vsechnu koncove ?> znacky. Muzete mi prosim vysvetlit, cim byl tento problem tedy zpusoben?
- vlki
- Člen | 218
Mrkni do coding standard.
To podstatné:
…
For files that contain only PHP code, the closing tag (?>) is never permitted. Not including it prevents trailing whitespace from being accidentally injected into the output.
…