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',
],
],
],
];