PHP Notice: Undefined variable: _SESSION

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

Ahoj, mám tokový problém a nemůžu přijít v čem by mohla být chyba. Čas od času mi do logu skočí hláška:

`PHP Notice: Undefined variable: _SESSION in /home/www/vymakdevel.cz/www/krbylipnik.vymakdevel.cz
/temp/cache/_Nette.FileTemplate/_templates._layout.latte-6a43e33b767770d8ea4bd9b2956622c0.php:172 @ http://www.krbylipnik.cz/…n/prihlasit/`

Vůbec nevím, v čem může být chyba protože když jdu na zmíněnou stránku tak k žádné chybě nedojde. Děje se tak většinou kolem půlnoci. Víte někdo kde by mohla být chyba?

BasePresenter

public function startup() {
        parent::startup();

        if (!$this->getUser()->isLoggedIn()) {
            if ($this->getName() != 'Admin:Prihlasit') {
                $this->redirect('Prihlasit:default');
            }
        } else {
            $this->template->logged = TRUE;
            $this->template->user = $this->getUser()->getIdentity()->getData();
        }
    }

    public function handleOut() {
        $this->getUser()->logout();
        $this->flashMessage('Byl jste úspěšně odhlášen!', 'success');
        $this->redirect(':Front:Homepage:default');
    }

    protected function checkAdminRequirments($rederict = 'Prihlasit:default') {
        if (!$this->getUser()->isInRole('admin')) {
            $this->flashMessage('K provedení operace nemáte potřebná oprávnění! Pokud chcete provést tuto změnu obraťte se na administrátora.', 'notice');
            $this->redirect($rederict);
        }
    }

Díky za každou radu :)

EDIT:
Na řádku 172 z uvedeného soubotu je tento kód:

<?php Nette\Diagnostics\Debugger::barDump(array('$_SESSION' => $_SESSION), "Template " . str_replace(dirname(dirname($template->getFile())), "\xE2\x80\xA6", $template->getFile()))  ?>

Editoval vymak (6. 1. 2014 0:27)

Myiyk
Člen | 321
+
0
-

Zkus si tu stránku otevřít v anonymním režimu (budeš „čistý“ od cookies), jestli to hodí chybu.
Podle chyby to vypadá, že se nezapne session.
Můžeš to jednoduše ověřit, že se podíváš na celou chybovou hlášku a mrkni do sekce Session, jestli vůbec existuje.

V configu se dá nastavit povinné zapínání session (https://doc.nette.org/cs/configuring#…).
Nastav autoStart: true

vymak
Člen | 92
+
0
-

Tak jsem to zkusil v anonymním okně a když zadám přímo tu adresu tak to vygeneruje tu hlášku. Pokud ale předtím navštívím libovolnou stránku a poté stránku kde to blbne již vše funguje bez problému.

Bude to tedy asi tím nezapnutím SESSION. Zkusím tam hodit ten autostart, snad to bude fungovat.

EDIT:
Tak vážně pomohlo autoStart: true

Díky moc :)

Editoval vymak (6. 1. 2014 12:29)

Myiyk
Člen | 321
+
0
-

K $_SESSION by se nemělo přistupovat přímo, pouze přes službu, např. $this->getSession(); (v presenteru)

https://doc.nette.org/…ttp/sessions

vymak
Člen | 92
+
0
-

Však k $_SESSION nikde přímo nepřistupuji :)

Jestli si myslel to co jsem tam postnul, tak to je vykopírovaný kód z cache, kterou si Nette vytváří :)

David Grudl
Nette Core | 8233
+
0
-

A co máš v šabloně?

vymak
Člen | 92
+
0
-

Tak je to moje chyba :(

Dříve jsem zkoušel přes dump v šabloně co je v SESSION a zapomněl jsem tam tohle:

<div class="main-content col11" id="main">
                <script> document.documentElement.className += ' js'</script>
                {dump $_SESSION}
                {snippet flashes}
                    <div n:foreach="$flashes as $flash"
                         class="flash {$flash->type}">{$flash->message|striptags|lower|firstUpper}   </div>
                {/snippet}
                {include #content}
            </div>
Robyer
Člen | 74
+
0
-

vymak napsal(a):

Dříve jsem zkoušel přes dump v šabloně co je v SESSION a zapomněl jsem tam tohle:

Možná to už víš, ale jen doplním, že v Nette 2.1 si můžeš zapnout session panel v debugbaru.

Stačí v configu:

nette:
	session:
		debugger: true
vymak
Člen | 92
+
0
-

Díky za tip.
Tohle jsem nevěděl, hodně mi to usnadní debug :)