Suche…


Bemerkungen

Cookies sind Teil der HTTP-Anfrage, daher ist es eine gute Idee, sowohl Controller als auch Controller zu erledigen, deren Verantwortlichkeit sich genau auf Anfrage und Antwort bezieht.

Um ein Cookie zu setzen, z. B. um es zu erstellen und für den Versand an den Browser zu \yii\web\Cookie müssen Sie eine neue Instanz der Klasse \yii\web\Cookie erstellen und der \yii\web\Cookie hinzufügen:

$cookie = new Cookie([
    'name' => 'cookie_monster',
    'value' => 'Me want cookie!',
    'expire' => time() + 86400 * 365,
]);
\Yii::$app->getResponse()->getCookies()->add($cookie);

Im obigen Abschnitt übergeben wir Parameter an den Cookie-Klassenkonstruktor. Diese sind im Wesentlichen die gleichen wie bei der systemeigenen PHP- Setcookie- Funktion:

  • name - Name des Cookies.
  • value - Wert des Cookies. Stellen Sie sicher, dass es eine Zeichenfolge ist. Browser sind normalerweise nicht glücklich über binäre Daten in Cookies.
  • domain - Domäne, für die Sie den Cookie setzen.
  • expire - Unix-Zeitstempel, der den Zeitpunkt angibt, zu dem der Cookie automatisch gelöscht werden soll.
  • path - Der Pfad auf dem Server, in dem das Cookie verfügbar sein wird.
  • secure - Wenn true , wird das Cookie nur gesetzt, wenn HTTPS verwendet wird.
  • httpOnly - Wenn true , ist ein Cookie nicht über JavaScript verfügbar.

Um ein Cookie zu lesen, verwenden Sie den folgenden Code:

$value = \Yii::$app->getRequest()->getCookies()->getValue('my_cookie');

Hinweis: Dieser Code ermöglicht das Lesen von Cookies, die mithilfe der Cookie-Komponente festgelegt wurden (da standardmäßig alle Cookies unterzeichnet werden). Wenn Sie Cookies mit JS-Code hinzufügen / aktualisieren, können Sie sie daher nicht standardmäßig lesen.

Cookies für Subdomains

Aus Sicherheitsgründen sind Cookies standardmäßig nur auf derselben Domäne verfügbar, von der aus sie gesetzt wurden. Wenn Sie beispielsweise ein Cookie auf der Domain example.com , können Sie es nicht auf der Domain www.example.com . Wenn Sie also Subdomains (z. B. admin.example.com, profile.example.com) verwenden möchten, müssen Sie die domain explizit festlegen:

$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);

Jetzt kann ein Cookie von allen Subdomains von example.com gelesen werden.

Subdomainübergreifende Authentifizierungs- und Identitäts-Cookies

Im Falle eines Autologin oder "Remember Me" -Cookies gelten die gleichen Macken wie bei Subdomain-Cookies. Diesmal müssen Sie jedoch die Benutzerkomponente konfigurieren und das identityCookie Array auf die gewünschte Cookie-Konfiguration setzen.

Öffnen Sie Ihre Anwendungskonfigurationsdatei und fügen Sie der Benutzerkomponenten-Konfiguration die Parameter " identityCookie hinzu:

$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,
            ],
        ],

    ],
];

Beachten Sie, dass cookieValidationKey für alle cookieValidationKey gleich sein sollte.

Beachten Sie, dass Sie die Eigenschaft session::cookieParams konfigurieren session::cookieParams , dass samedomain als user::identityCookie um sicherzustellen, dass die login und logout für alle Unterdomänen funktioniert. Dieses Verhalten wird im nächsten Abschnitt besser erläutert.

Parameter für Sitzungscookies

Parameter für Sitzungscookies sind wichtig, wenn Sie die Sitzung aufrechterhalten müssen, während Sie von einer Subdomain zur anderen wechseln, oder wenn Sie die Backend-App dagegen unter /admin URL hosten und die Sitzung separat behandeln möchten.

$config = [
    // ...
    'components' => [
        // ...
        'session' => [
            'name' => 'admin_session',
            'cookieParams' => [
                'httpOnly' => true,
                'path' => '/admin',
            ],
        ],
    ],
];


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow