2008-03-25

cookie's razem z header location

oto taki problem się zdarzył:

przychodzimy z formularza do części kodu, mamy wszystkie potrzebne dane z $_POST a, część po obróbce chcemy zapamiętać w cookie i przeładować stronę headerem. nic prostszego:

setcookie("informacja", $_POST["informacja"], time()+3600m, "/");
header("Location: index.php?action=back");

voilla! ... nie do końca

okazuje się że takiego cookie nie mamy, próbując mieszać w kodzie dochodzimy do wniosku że cookie nie chcą się nie tylko tworzyć, ale również kasować lub zmieniać. wszystkiemu winne pewnego rodzaju buforowanie strony metodą ob_start(); którą to dodajemy na początku kodu. nie zapominamy również o metodzie ob_end_flush(); lub ob_flush(); którą wpisujemy pod koniec logiki naszego skryptu (nawet po metodzie header(); która wydawałoby się przekierowuje stronę, jednak dokładniej metoda ta wysyła znacznik meta w części head strony, dzięki czemu przeglądarka automatycznie zmienia adres url). do tego momentu kod strony jest wykonywany i buforowany przed wysłaniem.

po takowym zabiegu osiągamy zamierzony efekt.

ps. serwer IIS5 wywołuje podobne objawy jak opisane powyżej, jednak niestety błędu nie powoduje niewiedza programistów (może nie nas konkretnie, ale może programistów, bo IISa też ktoś napisał). dzieje się tak najczęściej, kiedy w adresie strony (po Location: ...) znajdują się niealfanumeryczne znaki (za wyjątkiem "-" oraz "."). polecają aktualizację IIS lub zmianę header("Location: ..."); na header("Refresh 0; ...");

foo bar

echo "foo";
print "bar";

mój techblog

php mysql ajax erp