Autor Zpráva
mhanny
Profil *
ahoj, mám takový problém se session, resp. s jejím odebráním
řešil jsem to už několikrát, ale nakonec jsem přešel k jinému řešení, teď jsem se, ale rozhodl na to končeně přijít :)

situace:
mám formulář a při jeho odeslání se kontrolují odeslaná data, jakmile je něco zadáno špatně, informuje o tom stránka nad formulářem, jakmile jsou ale data zadána správně, provedou se určité operace a dojde k přesměrování na tu samou stránku, jako ochrana proti F5 a znovuodeslání

v tom si myslím, že problém není

jde o to, že chci kromě informování o špatném zadání také informovat o úspěšném odeslání a zpracování
to jsem vyřešil tím, že než dojde k přesměrování tak vytvořím nějakou session a na základě té pak uživateli napíšu o úspěšném zpracování

to vše mi funguje, tady je příklad kódu
if(IsSet($_SESSION['sent'])){
  echo "Odesláno...";
}


problém je v tom, že tu hlášku tam nechci po celou dobu, ale chci ji zobrazit jen jednou po tom odeslání, proto logicky po zobrazení danou session odeberu, tím by se příště neměla zobrazit

pre]if(IsSet($_SESSION['sent'])){
echo "Odesláno...";
UnSet($_SESSION['sent']);
}[/pre]

Jenomže tohle už mi nefunguje a já nevím proč :(
To echo se vůbec nevypíše, vlastně nic v té podmínce se nestane kromě toho odebrání session.
Lámu si nad tím hlavu a možná, že je to triviální problém.

No budu vděčný za každý názor a předem děkuji :)
mhanny
Profil *
abych upřesnil problém...

tohle funguje jak má
$_SESSION['text'] = "něco";
if(IsSet($_SESSION['text'])){
  echo $_SESSION['text'];
  UnSet($_SESSION['text']);
}


zjistil jsem, že neplechu mi to dělá jen pokud první řádek, tedy tu session nadefinuji před přesměrováním na tu samou stránku :)
mhanny
Profil *
Tak jsem to vyřešil, sice ne příliš elegantne, ale už to funguje jak má :)

do session nastavím číslo "1" a pak po každém použití této sessions toto číslo o jedno navýším a když dojde k číslu "3" tak ji teprv odeberu a tím tedy dojde k tomu, že se zobrazila jen jednou a to když byla její hodnota "2" :)

trošku chaos to přiznávám, nicméně pokud má někdo jiné řešení budu rád :)
v6ak
Profil
No nevím, jak to přesně máš, ale tipuji toho:
nastav session
přesměruj
...
vypis a smaž session

Takže skript nastaví session, přesměruje a skript dále pokračuje, i když uživatel to nevidí a vypíše a smaže session. Uživatelovi se pak načte nová stránka, která už bude mít sežranou session a nic nevypíše.
mhanny
Profil *
v6ak
Vlastně máte pravdu a teď mi došlo proč to nemohlo jít. Já jak jsem nad tím stále důmal tak mi to nemohlo dojít.
Chybu jsem měl v tom přesměrování, resp. za ním. Nepsané pravidlo, že po přesměrování následuje exit; aby se nepokračovalo v kódu a tím to bylo celé způsobené, že se daná session uživateli nezobrazila.

Vyřešeno děkuju moc :) vystihl jste to přesně, teď nechápu proč jsem si tím lámal tolik hlavu

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: