Problem z setcookie() - nagle przestało działać

0

Witam,
tak jak w temacie. Nagle przestało działać mi setcookie(). Ten kawałek kodu brzmi tak:

$orderID = newOrder($custID);	// tworzenie zamowienia
ob_start();
setcookie("order", $orderID, time()+3600*24*30, "/");		// tworzenie ciastka
ob_end_flush();
$info = addItem($orderID, $param);		// dodawanie prod.

Cały czas to działało i nagle nie tworzy mi ciastka. Sprawdzałem na dwóch przeglądarkach (mozilla i chrome).
Najlepsze jest to, że wszystko inne działa - tworzy zamówienie i dodaje produkt, a ciastka nie tworzy. Nawet gdy napiszę oddzielnie setcookie("xxx", "cos" time()+36002430); to nie działa.

0

Nie wypisujesz niczego wcześniej? to jest początek skryptu? pokaż zawartość newOrder.

0

Jaki mają sens funkcje ob_* w tym miejscu? Podpowiedź: żadnego.
Zapewne jak sugeruje @szopenfx wcześniej masz jakiś output, a masz ukrywanie ostrzeżeń i nie wiesz nawet o tym.
ob_start() przenieś NA SAM POCZĄTEK pliku, który wykonujesz jako pierwszy (jakiś index.php zapewne, choć możliwe, że używasz wielu plików php, wtedy na początek każdego, który wykonujesz bezpośrednio). ob_end_flush() nie jest Ci potrzebne w ogóle - skoro nie umiesz z tego korzystać to nie jest Ci potrzebne.

Jak już ogarniesz buforowanie i nie pomoże to jeżeli korzystasz z serwera zewnętrznego - sprawdź datę na serwerze, spróbuj ustawić ciastko bez limitu czasowego. Zorientuj się czy nie wywołujesz strony po https.

0

ob_start i end są dlatego, że te pliki są wywoływane poprzez ajax (czyli nie ma pliku nad nimi). Sprawdzałem i wszystko, ale to dokładnie wszystko działa poprawnie (tworzenie zamówienia, dodawanie produktu itd.), tylko nie mogę stworzyć cookie. Sprawdzałem tworzenie poprzez usunięcie ob_start i end, tworząc w nich inne ciastko (stecookie("xxx", "cos")), oraz tworząc inne ciastko poza ob_start i end.

Za ciastkami jest dopiero informacja, którą wyświetlam. Najciekawsze jest to że wszystko działało poprawnie i nagle przestało. Jedyne co zmieniałem w tym pliku to podczas tworzenia rekordu w bazie musiałem dodać jeszcze jedno pole - mimo to powróciłem do starego pliku i też nie działa.

0

Dobra znalazłem rozwiązanie. Umieściłem ob_start i end tylko na początku i końcu pliku.

Pytanie tylko, czemu przez kilka miesięcy działało to w poprzednie wersji ?

0

Podejrzewam, że jednak wypisujesz coś w newOrder($custID); tym bardziej, że błąd pojawił się po zmianie pola w DB - może masz jakiś komunikat, zresztą nie dowiemy się i tak bez zawartości tej funkcji czy modułu, który zapewne includujesz przed tym skrawkiem kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1