Jak nastavit Laděnku, aby zalogovala chybu při snaze zapnout session s daty v output bufferu?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
_Martin_
Generous Backer | 679
+
0
-

Pravidelně dostávám na produkci dvě chyby:

  • PHP User Notice: 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.
  • PHP User Notice: Possible problem: you are sending a HTTP header while already having some data in output buffer. Try Tracy\OutputDebugger or start session earlier.

Problém je ten, že se nevytváří žádný záznam Laděnky a na vývojovém stroji jsem se s chybou nikdy nesetkal. Objevuje se pouze na produkci a jen u některých požadavků – zkrátka se mi chybu nepodařilo nikdy nasimulovat. OutputDebugger umí chybu pouze vypsat, což mi nijak nepomůže. Existuje způsob, jak se dobrat místa, kde k chybě dochází, tj. např. donutit Nette, aby při této chybě zaznamenalo výstup Laděnky?

Nette knihovny používám ve verzi 2.3.

David Matějka
Moderator | 6445
+
+2
-

Necha se to zapnout pres logSeverity, viz https://phpfashion.com/…-nette-2-2-3

tahle chyba se vetsinou deje pri session smart startu. Ten nastartuje session bud pokud jiz existuje, nebo pri prvnim pozadavku. Na localu se ti to neprojevi, jelikoz jiz mas PHPSESSID, takze se nastartuje hned.

Zkontroluj, zda nemas nekde v sablone nejakou praci s uzivatelem (napr isLoggedIn atd.) pripadne jestli nepouzivas u formulare addProtection

_Martin_
Generous Backer | 679
+
0
-

David Matějka: Díky, vyzkouším to logSeverity. Že půjde o nějakou komplikaci se smart startem tuším, ale asi to bude nějaká zapeklitost, protože k session přistupuji už ve startup fázi presenteru.

David Matějka
Moderator | 6445
+
0
-

nemas nekde utf8 BOM?

_Martin_
Generous Backer | 679
+
0
-

David Matějka: Myslím, že ne – alespoň v tom věřím NetBeansům. Ani mi to moc nedává smysl: když to třeba zkouším na produkci sám, i si různě mažu cookies – tak k té chybě nedochází. Být to BOM, tak si myslím, že by k ní docházet muselo vždycky. No, nastavil jsem to logování, tak uvidím, kdy se tam co objeví =)

_Martin_
Generous Backer | 679
+
0
-

David Matějka: Ahoj, tak to bylo kvůli addProtection na formuláři v jednom presenteru, kde se výjimečně session ve startup metodě nespouštěly. Existuje nějaké best practice, jak toto řešit?

Zkoušel jsem vymýšlet úpravy formuláře nebo CsrfProtection komponenty, ale v zásadě jsem nepřišel na způsob, jak se z těchto komponent dostat před render fázi. Pokud se s komponentou pracuje prvně až v šabloně, tak se taky až při vykreslování připojí k presenteru – do té doby ani nemá session službu.