Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Setcookie tworzy ciasteczka dopiero za drugim razem
Forum PHP.pl > Forum > Przedszkole
Dyktus
Witam.

Na początku dodam, że próbowałem już wielu rzeczy i szukałem w wielu źródłach jednak nie znalazłem rozwiązania.

1) Mam skrypt logowania, który nie tworzy mi ciasteczek. Loguje mnie, ale gdy potem wejdę na dowolną podstronę moje ciasteczka i sesje znikają. Gdy zaloguje się za drugim razem wszystko jest już ok.

Kod
    setcookie("CMS-Account-Type",$type,(time+3600*24),"/","http://www.adres.pl");
        setcookie("CMS-UserLogin",$user_from_db,(time()+3600*24),"/","http://www.adres.pl");
        setcookie("CMS-Unique-ID",md5($user_from_db),(time()+3600*24),"/","http://www.adres.pl");
        setcookie("CMS-LoginStatus",true,(time()+3600*24),"/","http://www.adres.pl");
    setcookie("CMS-PaybackID",$id_user,(time()+3600*24),"/","http://www.adres.pl");    

   $actual_adress = $_SERVER['REQUEST_URI'];
        header( 'refresh:0;url='.$actual_adress);


Z tworzeniem sesji jest podobny efekt smile.gif jest ona zapamiętana po przekierowaniu, ale gdy potem ruszę na inną podstronę to już znika.

2) Dodam, że w pliku index.php mam na początku dane

Kod
ob_start();
session_start();

//Cały kod strony

ob_end_flush();


3) Być może problem też wynika z ustawień htaccess, które mam rozwiązane w ten sposób:

Kod
RewriteEngine on
Options All -Indexes
RewriteRule ^.+(includes/.+)$ $1 [L]
RewriteRule ^.+(modules/.+)$ $1 [L]
RewriteRule ^.+(admin/.+)$ $1 [L]
RewriteRule ^.+(klasy/.+)$ $1 [L]
RewriteRule ^.+(pliki/.+)$ $1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(jpg|png|jpeg)

RewriteRule ^.*$ index.php/$1 [L]


Próbowałem użyć setcookie z trzema parametrami tj. nazwa,zawartość, data ważności i też bez efektu.

Dodatkowe informacje: w ustawieniach php sesion.save_path jest ustawione na /tmp i folder ten istnieje na moim serwerze w pliku public_html z odpowiednio ustawionymi chmodami (do dostępu).

Nie wiem czy dział przedszkole to dobry dział, problem jest pewnie banalny jednak nie znalazłem rozwiązania mojej sprawy w związku z czym chcę poradzić się bardziej zaawansowanych użytkowników.
timon27
Jak sprawdzasz istnienie cookie?
Strzelam że nie wiesz jak działa cookie.
Więc:
Gdy tworzysz cookie za pomocą setcookie to tworzone jest ciasteczko i wysyłane jest ono do użytkownika.
Zaś zmienna $_COOKIE jest pobierana przez serwer w momencie zapytania (zanim wykona się kod php).
Dlatego gdy dasz setcookie('ciasteczko','wartosc') to zmienna $_COOKIE['ciasteczko'] będzie pusta - serwer gdy był odpytywany nie dostał takiego ciasteczka.
Jeśli chcesz od razu korzystać z tego ciasteczka (co jest zbędne bo możesz to mieć w innej zmiennej) to musisz dać oprócz setcoockie kod:
  1. $_COOKIE['ciasteczko']='wartosc';
Dyktus
Pamiętam, że jak jeszcze pół roku temu pisałem skrypt logowania to sposób ustawiania wartości ciasteczka przy pomocy setcookie działał bezproblemowo i miało ono wartość od razu ustaloną wartość.

Czy ciasteczko istnieje sprawdzam w ten sposób:

Kod
if(isset($_COOKIE['ciasteczko']){
  //do something
}else{
//brak ciasteczka
}

@edit

No i niestety nawet przypisanie potem wartości do
Kod
$_COOKIE['ciasteczko']='blabla';
nie działa poprawnie, bo mnie wylogowuje z niewiadomych powodów

Dodam jeszcze, że po zalogowaniu w przeglądarce tworzy mi się tylko ciasteczko o nazwie "_ga" co również jest dziwne.
Wyszłoby na to, że skrypt działa bo obok ciasteczek tworzę sesje, które zresztą też nie są pamiętane po pierwszym logowaniu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.