Jak nastavit Laděnku, aby zalogovala chybu při snaze zapnout session s daty v output bufferu?
- _Martin_
- Generous Backer | 679
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
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
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
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.