Strata session premenných po presmerovaní

Programovacie jazyky, rady, poradňa...
camo
Medium Expert
Medium Expert
Príspevky: 98
Registrovaný: 05 sep 2009, 14:01
Bydlisko: Lehota
Kontaktovať používateľa:

Strata session premenných po presmerovaní

Príspevok od používateľa camo »

Zdravím,
mám dosť zapeklitý problém so session po presmerovaní. Ale nieje to v tom, že by som zabudol na exit(práve v tom je ten problém).
Mám kód:
session_start();
$_SESSION['test']='test';
header('location:http://niekam.sk/inam');
exit;

Normálne sa session po presmerovaní stratí, ak tam zabudnete pridať exit, alebo die(). Ale ako vidíte ja ho tam mám((aj session_start a ani prázdne znaky neposielam pred headerom)). Apache log píše iba "undefined index test". Na online servery to funguje bez problémov, len na locale mi to blbne. Pred časom som nainštaloval nový Apeche 2.4 a PHP 5.4 na Win XP sp3, tak rozmýšľam či to nieje v tom. Ale netuším v čom. Ani Google, DJPW a Stackoverflow netušia...
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Strata session premenných po presmerovaní

Príspevok od používateľa pcsiete »

Skús ich poslať "manuálne"
http://stackoverflow.com/a/1861437/948909
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Strata session premenných po presmerovaní

Príspevok od používateľa audiotrack »

neviem kde si nabral že s exitom alebo s die by to malo fungovať. Tú sú funkcie ktoré iba prerušia vykonávanie skriptu, takže čokoľvek za nimi sa ignoruje a pošle sa chybový kód. Nemá to na to najmenší vplyv, či tam exit máš alebo nemáš (v tomto tvojom konkrétnom prípade).
Problém u teba robí to, že session sa viaže na doménu. Ak to skúšaš na serveri, a presmerovávaš vrámci tej istej domény (teda len na inú podstránku) tak jasné že to fungovať bude. Ak to skúšaš lokálne a presmerovávaš napríklad z localhostu niekam na web, tak sa zmení doména a logicky tie session nemôže poznať
camo
Medium Expert
Medium Expert
Príspevky: 98
Registrovaný: 05 sep 2009, 14:01
Bydlisko: Lehota
Kontaktovať používateľa:

Re: Strata session premenných po presmerovaní

Príspevok od používateľa camo »

pcsiete
Ani to nepomáha. ale už som prišiel na to čo to spôsobuje. Upravoval som Apache, aby akceptoval aj adresu http://www.localhost. Problém je keď pri presmerovaní to www neuvediem. Keď to tam pridám, tak to funguje.

//autoeditácia príspevku (25 Júl 2013, 14:38)
audiotrack:
Chceš mi povedať, že tebe to funguje aj bez exitu? To mi nerozprávaj. Stačí si zadať do Googlu seesion desn´t work after redirect.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Strata session premenných po presmerovaní

Príspevok od používateľa audiotrack »

no veď to sú dve rôzne (sub)domény. Jedna je *. a druhá je www.
takže si iba napísal to isté čo som ti písal ja :) Len som použil iný príklad

a k tomu exitu: písal som že to ukončí skript. A teda aj zapíše session do súboru. Bez exitu ti to bude tiež fungovať, ak tie sesion pred redirectom zapíšeš "ručne". To čo popisuješ nie je chyba presmerovania alebo exitu, je to chyba človeka ktorý nepoužíva hlavu a naivne si myslí že môže čítať premenné ešte pred ich zapísaním
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Strata session premenných po presmerovaní

Príspevok od používateľa pcsiete »

audiotrack napísal:neviem kde si nabral že s exitom alebo s die by to malo fungovať. Tú sú funkcie ktoré iba prerušia vykonávanie skriptu, takže čokoľvek za nimi sa ignoruje a pošle sa chybový kód. Nemá to na to najmenší vplyv, či tam exit máš alebo nemáš (v tomto tvojom konkrétnom prípade).
Problém u teba robí to, že session sa viaže na doménu. Ak to skúšaš na serveri, a presmerovávaš vrámci tej istej domény (teda len na inú podstránku) tak jasné že to fungovať bude. Ak to skúšaš lokálne a presmerovávaš napríklad z localhostu niekam na web, tak sa zmení doména a logicky tie session nemôže poznať
exit ukončuje script, teda je pokojne možné že sa pri jeho vykonaní volajú registrované (register_shutdown_function) procedúry na flushing pre sessions alebo niečo podobné.
Podľa mňa je lepšou praktikou vytvoriť si zjednotenú funkciu pre ukončovanie scriptov a zapisovanie sessions, a následne ju registrovať, ako to robiť všade osamostatnene. Aj keď to síce ešte teraz nevyužíva, v budúcnosti sa mu ten exit za presmerovaním môže zísť.
camo
Medium Expert
Medium Expert
Príspevky: 98
Registrovaný: 05 sep 2009, 14:01
Bydlisko: Lehota
Kontaktovať používateľa:

Re: Strata session premenných po presmerovaní

Príspevok od používateľa camo »

pcsiete:
Práve takú funkciu používam. No a keďže po exite sa session zapíše automaticky, tak je zbytočné meditovať nad nejakými explicitnými zápismi.

//autoeditácia príspevku (25 Júl 2013, 15:15)
audiotrack:
Prečo mám dojem, že si na začiatku nemal na mysli adresy s www a bez www. Však mohol si to napísať rovno, aj keď v tej dobe som to už vedel aj ja. Či sa mýlim :wink: ?
Napísať odpoveď