Problem so Session v komponente

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

Zdravim, potrebujem poradit, v mojej komponente potrebujem pouzivat session, ale vzdy pri prvom spusteni ked session neexistuje mi to hodi hlasku „Possible problem: you are starting session while already having some data in output buffer. This may not work if the outputted data grows. Try starting the session earlier“

$this->session = $session->getSection($name);
$this->session->setExpiration(0);

takto to robim a hodi mi to na druhy riadok, asi viem kde je problem, proste session vytvaram neskoro, ale nwm ako to vyriesit, kedze potrebujem v tej komponente session. Nejaky napad? Pouzivaju to moje objkety a nemozem im nastavit na dane atributy persistent… :/

David Matějka
Moderator | 6445
+
0
-

v jake metode s tou session pracujes?

Raiper34
Člen | 65
+
0
-

v konstruktore a handle

Editoval Raiper34 (6. 3. 2016 14:44)

David Matějka
Moderator | 6445
+
+1
-

V handle to bude ok, v konstruktoru to muze byt problem. Komponenty se vytvareji az kdyz jsou potreba. Tedy napriklad az pri renderovani – coz bude asi i tvuj pripad.

jako rychly hotfix staci v presenteru napsat neco jako $this['nazevKomponenty'] coz zpusobi jeji okamzite vytvoreni.

dalsi moznosti je zmenit startovani session, mas tam asi smart, ktere se startuje:

  1. kdyz je poprve potreba
  2. kdyz existuje PHPSESSID (tedy session byla pouzita v predchozim requestu) – ihned na zacatku requestu

zapnutim autostart na true se bude zapinat vzdy hned na zacatku – to ma smysl, kdy je session potreba v podstate na kazde strance (a tedy nema cenu pouzivat „smart“ protoze bude tak jako tak zapnuta)

Pokud chces nechat autostart smart, tak pak muzes jeste zvazit jak pracovat se session.
jestli treba pri renderovani potrebujes jen cist a ne zapisovat (zapisujes treba v handle), tak si staci overovat if ($session->isStarted()). Jelikoz kdyz neni nastartovane, znamena to, ze session neexistuje a tudiz muzes pracovat s nejakou defaultni hodnotou