PHP
Ciasteczka
Szukaj…
Wprowadzenie
Plik cookie HTTP to niewielka część danych wysyłana ze strony internetowej i przechowywana na komputerze użytkownika przez przeglądarkę internetową użytkownika podczas przeglądania.
Składnia
bool setcookie( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
Parametry
parametr | Szczegół |
---|---|
Nazwa | Nazwa ciasteczka. Jest to również klucz, którego możesz użyć do odzyskania wartości z super globalnej $_COOKIE . Jest to jedyny wymagany parametr |
wartość | Wartość do zapisania w pliku cookie. Te dane są dostępne dla przeglądarki, więc nie przechowuj tutaj niczego wrażliwego. |
wygasać | Uniksowy znacznik czasu wskazujący, kiedy plik cookie powinien wygasnąć. Jeśli ustawiony na zero, ciasteczko wygaśnie pod koniec sesji. Jeśli zostanie ustawiony na wartość mniejszą niż bieżący znacznik czasu Unixa, plik cookie wygasa natychmiast. |
ścieżka | Zakres pliku cookie. Jeśli ustawione na / plik cookie będzie dostępny w całej domenie. Jeśli ustawione na /some-path/ ciasteczko będzie dostępne tylko na tej ścieżce i potomkach tej ścieżki. Domyślnie bieżąca ścieżka do pliku, w którym zapisywany jest plik cookie. |
domena | Domena lub subdomena, na której plik cookie jest dostępny. Jeśli ustawisz gołą domenę stackoverflow.com plik cookie będzie dostępny dla tej domeny i wszystkich subdomen. Jeśli zostanie ustawiona subdomena meta.stackoverflow.com plik cookie będzie dostępny tylko w tej subdomenie i we wszystkich subdomenach. |
bezpieczne | Po ustawieniu na TRUE plik cookie zostanie ustawiony tylko wtedy, gdy istnieje bezpieczne połączenie HTTPS między klientem a serwerem. |
httponly | Określa, że plik cookie powinien być udostępniany tylko za pośrednictwem protokołu HTTP / S i nie powinien być dostępny dla języków skryptowych po stronie klienta, takich jak JavaScript. Dostępne tylko w PHP 5.2 lub nowszym. |
Uwagi
Warto zauważyć, że samo wywołanie setcookie
nie tylko umieszcza dane w superglobalnej tablicy $_COOKIE
.
Na przykład nie ma sensu robić:
setcookie("user", "Tom", time() + 86400, "/");
var_dump(isset($_COOKIE['user'])); // yields false or the previously set value
Wartość jeszcze nie istnieje, dopiero po załadowaniu następnej strony. Funkcja setcookie
mówi tylko „ przy następnym połączeniu http powiedz klientowi (przeglądarce), aby ustawił ten plik cookie ”. Następnie, gdy nagłówki są wysyłane do przeglądarki, zawierają ten nagłówek pliku cookie. Przeglądarka sprawdza następnie, czy plik cookie jeszcze nie wygasł, a jeśli nie, to w żądaniu HTTP wysyła plik cookie do serwera i wtedy PHP je otrzymuje i umieszcza zawartość w tablicy $_COOKIE
.
Ustawianie pliku cookie
Ciasteczko jest ustawiane za pomocą setcookie()
. Ponieważ pliki cookie są częścią nagłówka HTTP, należy ustawić pliki cookie przed wysłaniem danych wyjściowych do przeglądarki.
Przykład:
setcookie("user", "Tom", time() + 86400, "/"); // check syntax for function params
Opis:
- Tworzy ciasteczko z nazwą
user
- (Opcjonalnie) Wartość pliku cookie to
Tom
- (Opcjonalnie) Plik cookie wygasa za 1 dzień (86400 sekund)
- (Opcjonalnie) Pliki cookie są dostępne w całej witrynie
/
- (Opcjonalnie) Pliki cookie są wysyłane tylko przez HTTPS
- (Opcjonalnie) Pliki cookie nie są dostępne dla języków skryptowych, takich jak JavaScript
Do utworzonego lub zmodyfikowanego pliku cookie można uzyskać dostęp tylko przy kolejnych żądaniach (w których
path
idomain
zgodne), ponieważ superglobalna$_COOKIE
nie jest natychmiast zapełniana nowymi danymi.
Odzyskiwanie pliku cookie
Pobierz i wyślij user
nazwie Cookie
Wartość pliku cookie można odzyskać za pomocą zmiennej globalnej $_COOKIE
. przykład, jeśli mamy plik cookie o nazwie user
możemy go pobrać w ten sposób
echo $_COOKIE['user'];
Modyfikowanie pliku cookie
Wartość pliku cookie można zmodyfikować, resetując plik cookie
setcookie("user", "John", time() + 86400, "/"); // assuming there is a "user" cookie already
Pliki cookie są częścią nagłówka HTTP, więc
setcookie()
musi zostać wywołane przed wysłaniem danych wyjściowych do przeglądarki.
Podczas modyfikowania pliku cookie upewnij się, że
path
i parametrydomain
setcookie()
odpowiadają istniejącemu plikowi cookie, w przeciwnym razie zostanie utworzony nowy plik cookie.
Część wartościowa pliku cookie zostanie automatycznie zakodowana podczas wysyłania pliku cookie, a po jego otrzymaniu jest automatycznie dekodowana i przypisywana do zmiennej o tej samej nazwie co nazwa pliku cookie
Sprawdzanie, czy plik cookie jest ustawiony
Użyj funkcji isset()
w superglobalnej zmiennej $_COOKIE
, aby sprawdzić, czy plik cookie jest ustawiony.
Przykład:
// PHP <7.0
if (isset($_COOKIE['user'])) {
// true, cookie is set
echo 'User is ' . $_COOKIE['user'];
else {
// false, cookie is not set
echo 'User is not logged in';
}
// PHP 7.0+
echo 'User is ' . $_COOKIE['user'] ?? 'User is not logged in';
Usuwanie pliku cookie
Aby usunąć plik cookie, ustaw znacznik czasu wygaśnięcia na czas z przeszłości. To uruchamia mechanizm usuwania przeglądarki:
setcookie('user', '', time() - 3600, '/');
Podczas usuwania pliku cookie upewnij się, że
path
i parametrydomain
setcookie()
odpowiadająsetcookie()
cookie, który próbujesz usunąć, lub zostanie utworzony nowy plik cookie, który wygasa natychmiast.
Dobrym pomysłem jest również $_COOKIE
wartości $_COOKIE
na wypadek, gdyby bieżąca strona jej używała:
unset($_COOKIE['user']);