Session start miért nem bir indulni a headers miatt?
Üdv, hát próbálkozok működni a sessionnel, de a következő hibaüzenetet küldi:
" session_start(): Cannot start session when headers already sent "
Próbáltam már választ találni a neten, és csak annyit találtam , hogy elég jellemző probléma, de megoldást nem igazán találtam rá,
igazából a headers szerepét sem értem, nem ismerem.
A segitséget előre is köszönöm.
Csak érdemi, segitő választ várok. Köszönöm.
Na akkor sorban haladva építsük fel a weboldadat:
Egy weboldal úgy működik, hogy szabályos HTTP kéréseket küldesz a szerverre, amire szabályos HTTP válaszokat kapsz. Egy HTTP csomag, ami megy a két pont között, lényegében áll egy fejlécből (ez a header), és egy tartalomból (body, vagy payload, nem tudom már http-nél hogy hívják).
A header tartalmazza azokat az információkat, hogy milyen verzió megy, mit szeretnél csinálni (lekérdezés, vagy beküldés a két jellemző [GET és POST] ), mi a te IP címed, és ki a címzett (vagyis a szerver akinek küldöd a kérést). A tartalomban meg maga a html van, amit a böngésző megjelenít.
Na ez most PHP-nél hogy jelenik meg:
Kap a szerver egy kérést egy adott php fájlra, a PHP környezet lefuttatja a fájlt, és generál egy kimenetet, amit elküld -ez a kimenet egy http csomag, fejléccel, és utána mindennel amit te írsz ki.
Na most létezik egy olyan, hogy session: ez egy szerveroldali módszer arra, hogy eltároljon változókat, főleg sütik helyett használják (mert biztonságosabb és gyorsabb). Ezt a session-t, amit most mondjuk magyarul úgy fogok hívni hogy tranzakció (csak hogy megértsd, úgyhogy szakik ne kössenek bele hogy az egész más), és ezt a tranzakciót el kell indítani/inicializálni hogy működjön.
Csakhogy mi van, ha már elkezdte a PHP összerakni a HTTP választ, amikor elindítod a tranzakció-kezelőt?
Ebben az esetben módosítania kéne a megkezdett csomagon, ami felesleges munka lenne, így nem is engedi. Ez az a hibaüzenet, amit kaptál, hogy már elküldte a fejlécet, amikor piszkálni próbálod.
Ennek megoldása esetedben: azelőtt kell elindítani a "tranzakciót" vagyis session-t, hogy bármit csinálna, vagyis a kódjaid legeslegesleges-legelején, még a html tagek meg minden más előtt.
Vagyis ha megnyitsz egy fájlt, így kell kezdődnie:
<?php
session_start();
és csak ezután jöhet bármi más.
Ha továbbra sem érted, akkor írj privátban.
#2, igazad van, első vagyok, azt már elfelejtettem leírni. Sőt, UTF8 kódolás esetén a BOM is okozhat gondot, ha van.
De majd a kérdező leírja, segített-e neki a válaszunk :)
Igen, sajna anno belefutottam, csak ezért írtam..
:)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!