yii2
Ciasteczka
Szukaj…
Uwagi
Pliki cookie są częścią żądania HTTP, więc dobrze jest zrobić to zarówno w kontrolerze, który odpowiada dokładnie za żądanie i odpowiedź.
Ustawianie pliku cookie
Aby ustawić plik cookie, tj. Utworzyć go i zaplanować wysyłanie do przeglądarki, musisz utworzyć nową instancję klasy \yii\web\Cookie
i dodać ją do kolekcji plików cookie odpowiedzi:
$cookie = new Cookie([ 'name' => 'cookie_monster', 'value' => 'Me want cookie!', 'expire' => time() + 86400 * 365, ]); \Yii::$app->getResponse()->getCookies()->add($cookie);
Powyżej przekazujemy parametry konstruktorowi klasy plików cookie. Te są w zasadzie takie same, jak używane z natywną funkcją setcookie PHP:
-
name
- nazwa ciasteczka. -
value
- wartość ciasteczka. Upewnij się, że to ciąg. Przeglądarki zazwyczaj nie są zadowolone z danych binarnych w plikach cookie. -
domain
- domena, dla której ustawiasz ciasteczko. -
expire
- uniksowy znacznik czasu wskazujący, kiedy plik cookie powinien zostać automatycznie usunięty. -
path
- ścieżka na serwerze, na której będzie dostępny plik cookie. -
secure
- jeśli totrue
, plik cookie zostanie ustawiony tylko wtedy, gdy zostanie użyty HTTPS. -
httpOnly
- jeśli totrue
, ciasteczko nie będzie dostępne przez JavaScript.
Czytanie ciasteczka
Aby odczytać plik cookie, użyj następującego kodu:
$value = \Yii::$app->getRequest()->getCookies()->getValue('my_cookie');
Uwaga: ten kod pozwala na odczyt plików cookie, które zostały ustawione przy użyciu komponentu cookie (ponieważ domyślnie podpisuje wszystkie pliki cookie). Dlatego jeśli dodasz / zaktualizujesz plik cookie przy użyciu kodu JS, nie będziesz mógł go odczytać przy użyciu tej metody (domyślnie).
Pliki cookie dla poddomen
Ze względów bezpieczeństwa pliki cookie są domyślnie dostępne tylko w tej samej domenie, w której zostały ustawione. Na przykład, jeśli ustawiłeś plik cookie w domenie example.com
, nie możesz go uzyskać w domenie www.example.com
. Jeśli więc planujesz użyć poddomen (np. Admin.example.com, profile.example.com), musisz wyraźnie ustawić domain
:
$cookie = new Cookie([ 'name' => 'cookie_monster', 'value' => 'Me want cookie everywhere!', 'expire' => time() + 86400 * 365, 'domain' => '.example.com' // <<<=== HERE ]); \Yii::$app->getResponse()->getCookies()->add($cookie);
Teraz plik cookie można odczytać ze wszystkich poddomen domeny example.com
.
Pliki cookie służące do uwierzytelniania i identyfikacji w wielu poddomenach
W przypadku plików cookie autologin lub „Remember me” obowiązują te same dziwactwa, co w przypadku plików cookie subdomeny. Ale tym razem musisz skonfigurować komponent użytkownika, ustawiając tablicę identityCookie
na pożądaną konfigurację plików cookie.
Otwórz plik konfiguracyjny aplikacji i dodaj parametry identityCookie
do konfiguracji komponentu użytkownika:
$config = [ // ... 'components' => [ // ... 'user' => [ 'class' => 'yii\web\User', 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, 'loginUrl' => '/user/login', 'identityCookie' => [ // <---- here! 'name' => '_identity', 'httpOnly' => true, 'domain' => '.example.com', ], ], 'request' => [ 'cookieValidationKey' => 'your_validation_key' ], 'session' => [ 'cookieParams' => [ 'domain' => '.example.com', 'httpOnly' => true, ], ], ], ];
Pamiętaj, że cookieValidationKey
powinien być taki sam dla wszystkich subdomen.
Pamiętaj, że musisz skonfigurować właściwość session::cookieParams
aby samedomain był twoim user::identityCookie
aby zapewnić login
i logout
dla wszystkich poddomen. To zachowanie jest lepiej wyjaśnione w następnej sekcji.
Parametry cookie sesji
Sesyjne parametry plików cookie są ważne zarówno wtedy, gdy trzeba utrzymywać sesję podczas przechodzenia z jednej subdomeny, jak i gdy, przeciwnie, hostujesz aplikację zaplecza pod /admin
URL i chcesz osobno obsługiwać sesję.
$config = [ // ... 'components' => [ // ... 'session' => [ 'name' => 'admin_session', 'cookieParams' => [ 'httpOnly' => true, 'path' => '/admin', ], ], ], ];