Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz InfiniteReality #9249 üzenetére

    PazsitZ előttem már szépen elmondta, vannak alternatív módszerek annak elkerülésére, hogy több fájlban is kelljen sessionöket küldözgetni. Meg lehet template-ezni is, stb. Alapvetően a keretrendszerek, CMS-ek felhasználásakor nem kell ilyesmivel szívnod.
    De hogy lehetséges megoldást mondjak arra is, amiről Te beszélsz, lehet ellenőrzéseket is végezni:
    1.) headers_sent() függvény segítségével megtudhatod, a HTTP fejlécek el vannak-e már küldve - azt is meg lehet vele tudni, konkrétan hol.

    Ilyen módon nem használtam még, de ez működhet:
    if(!headers_sent && !isset($_SESSION)){
    session_start();
    }

    2.) AJAX problémára:
    a jQuery pl. beállít egy fejlécet az XMLHTTPRequest-kérésekre (lásd [link]), így a jQuery-s AJAX-függvények használata esetén ez is teljes biztonsággal ellenőrizhető (sokszor tesztelve, valóban működik):

    define('IS_AJAX', ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) );

    if(IS_AJAX){
    session_start();
    }

    Valószínűleg más JS-library-k, frameworkök is beállítanak valami plusz headert, hogy konkrétan mit, az könnyen kideríthető.
    Mivel elsősorban AJAX-os problémáról beszéltél Te is, utóbbi megoldás lehet a jobb a kettő közül. De alapvetően inkább egyik sem - jobb adni egy "keretet" a programjaidnak, amiben bizonyos szabályok szerint működnek a dolgok, mindennek megvan a helye, és nem mindenféle fájlban indítgat az ember sessiont - valami olyasmi a megoldás, amit előttem PazsitZ leírt.

    Alapvetően a hibák elnyomása a @ karakterrel egy nagyon rossz szokásra ösztönöz.
    Az elnyomott hibák felderítése pedig egy kódban maga a pokol.
    NEM képzelhető el olyan eset, amikor a hibák elnyomását ne lehetne elkerülni valami előzetes vizsgálattal. Ha pedig van rá lehetőség, akkor azt kell alkalmazni.

Új hozzászólás Aktív témák