2012-05-10 13 views
15

Muszę wymyślić sposób rozbrojenia tego pliku cookie. Wszystko, co dotąd próbowałem, zawiodło.jak usunąć plik cookie w PHP?

To jak jestem obecnie wyłączania go i nie wydają się działać.

setcookie("user_id", $user_id, time() - 7200); 

ten sposób ustawić go:

setcookie("user_id", $user_id, time() + 7200); 

mam tej funkcji o nazwie set_session_from_cookie(), który sprawdza, czy plik cookie jest ustawiony, a jeśli jest on ustawiony, to zaczyna nową sesję za pomocą plików cookie.

Problem polega na tym, że gdy używam tego na mojej stronie, nie mogę się wylogować. Zakładam, że dzieje się tak dlatego, że nie mogę anulować sesji.

Powodem mam tej funkcji, jeśli użytkownik chce być zapamiętany po kończą sesję, można je ponownie uruchomić sesję wywołując cookie.

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

Wyloguj:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

mogę ustawić ciasteczko z następującego kodu:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

Jak mogę ponownie uruchomić sesję używając zapisany plik cookie bez użycia funkcji stworzyłem? Ponieważ wydaje się, że funkcja powoduje, że użytkownik nie może się już wylogować.

+0

Czy Twój ciasteczko powinno być w całej witrynie? –

+0

czy tak powinno być? Jak mogę to powiedzieć? – arboles

+4

Nie używaj czasów względnych do rozbrajania plików cookie. To sprawia, że ​​rozbrojenie zależy od dokładności zegara użytkownika. Użyj czasu "1", który przyciągnie wszystkich oprócz tych z naprawdę zepsutymi zegarami, którzy myślą, że jest 1970. –

Odpowiedz

9

Rozwiązaniem tego problemu było to, że musiałem ustawić prawidłową ścieżkę do rozbroić cookie odkąd przywracałem go z innego pliku, w którym go pierwotnie ustawiłem.

Dowiedziałem się, którą ścieżkę musiałem użyć dla unseta, szukając ciasteczka w ciasteczkach przeglądarkowych i gdy znalazłem plik cookie w moim przeglądarka, ścieżka została wyświetlona w pobliżu pliku cookie. Tak więc ustawiam ścieżkę do pliku cookie tak:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

Ostatnim parametrem jest ścieżka. I zadziałało.

mój oryginalny setcookie wygląda następująco:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

Ustaw datę ważności pliku cookie na czas w przeszłości (np. Jedną sekundę po epoch, na przykład).

setcookie("yourCookie", "yourValue", 1);

Spowoduje cookie wygaśnie.

1 jest używany zamiast 0, ponieważ 0 ustawia plik cookie wygasający na końcu sesji.

+0

to 1 uważany za czas w przeszłości? – arboles

+1

@arboles Czas podany jest w postaci znacznika UNIX, więc tak, 1 było dawno temu :) –

+13

1 to "1 stycznia, 19:70 00:00:01" –

3

Look w podręczniku PHP do informacji o setcookie

http://php.net/manual/en/function.setcookie.php

Uwagi te powinny wyjaśnić proces:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

Cookies muszą być usunięte z tymi samymi parametrami jak były ustawione z. Jeśli argument value jest pusty lub FALSE, a wszystkie inne argumenty są zgodne z poprzednim wywołaniem setcookie, to plik cookie o określonej nazwie zostanie usunięty ze zdalnego klienta. Ten jest wewnętrznie osiągnięty przez ustawienie wartości "usuniętych" i wygaśnięcia czasu do jednego roku w przeszłości.

Ponieważ ustawienie pliku cookie o wartości FALSE spowoduje usunięcie pliku cookie , nie należy używać wartości boolowskich. Zamiast tego użyj 0 dla FALSE i 1 dla TRUE.

+0

Obecnie robię to, używając tych samych parametrów do usunięcia, co mam ustawić. i to nie działa. – arboles

6

Istnieje kilka kwestie bezpieczeństwa związane kodować jednak odpowiedzieć na pytanie, aby rozbroić cookie w php, wszystko co musisz zrobić, to ustawić czas ważności do czasu w przeszłości:

setcookie("user_id", "", time()-10, "/"); 

"loginform.php" nie jest prawidłową domeną, co może być problemem tutaj.

+0

Jak ustawić domenę na moim lokalnym hoście? – arboles

+0

wystarczy umieścić ukośnik podobny do tego, który miałem w przykładzie "/", to znaczy, że ten plik cookie jest dostępny dla całej Twojej domeny. –

1

W podręczniku php, można usunąć plik cookie, ustawiając datę ważności jest w przeszłości:

setcookie("key","",time()-3600); 

W niektórych przypadkach należy podać ścieżkę i domenę dla argumentów.

W rzeczywistości, jeśli przypisać cookie z pustym ciągiem, to będzie także rozbrojony:

setcookie("key",""); 
+0

Wiem, obecnie używam tej metody i to nie działa. – arboles

+0

Być może konieczne może być ręczne określenie ścieżki i domeny. –

4

użyć tego kodu

setcookie("CookieName", "", time()-(60*60*24), "/"); 

działa za każdym razem dla mnie w każdej stronie