サーチ…


備考

CookieはHTTPリクエストの一部なので、コントローラで両方の処理を行うことは、リクエストとレスポンスを正確に処理する責任があります。

クッキーの設定

クッキーを設定するには、それを作成してブラウザに送信するスケジュールを設定するには、新しい\yii\web\Cookieクラスインスタンスを作成し、それをレスポンスクッキーコレクションに追加する必要があります。

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

上記では、クッキークラスのコンストラクタにパラメータを渡しています。これらは基本的にネイティブのPHP setcookie関数で使用されるものと同じです:

  • name - クッキーの名前。
  • value - クッキーの値。それが文字列であることを確認してください。ブラウザは通常、クッキー内のバイナリデータに満足していません。
  • domain -あなたのためにクッキーを設定しているドメイン。
  • expire - クッキーが自動的に削除されるべきであることを示すunixタイムスタンプ。
  • path - クッキーが使用可能になるサーバー上のパス
  • secure - true場合、HTTPSが使用されている場合にのみCookieが設定されます。
  • httpOnly - true 、JavaScript経由でCookieを使用できなくなります。

クッキーを読む

Cookieを読み込むには、次のコードを使用します。

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

注:このコードでは、cookieコンポーネントを使用して設定された読み取りCookieを許可しています(デフォルトですべてのCookieに署名するため)。したがって、JSコードを使用してCookieを追加/更新すると、このメソッドを使用して読み取ることはできません(デフォルト)。

サブドメインのCookie

セキュリティ上の理由から、デフォルトでは、Cookieは設定されたドメインと同じドメインでしかアクセスできません。たとえば、ドメインexample.comでCookieを設定した場合、ドメインwww.example.com Cookieを取得することはできません。したがって、サブドメイン(admin.example.com、profile.example.comなど)を使用する場合は、 domain明示的に設定する必要があり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);

これでcookieはexample.comすべてのサブドメインから読み取ることができexample.com

クロスサブドメイン認証とアイデンティティクッキー

自動ログインまたは「私を覚えている」クッキーの場合、サブドメインクッキーの場合と同じクォークが適用されます。しかし、今回は、ユーザーコンポーネントを設定し、 identityCookie配列を目的のCookie設定に設定する必要があります。

アプリケーション構成ファイルを開き、ユーザーコンポーネント構成にidentityCookieパラメーターを追加します。

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

    ],
];

cookieValidationKeyはすべてのサブドメインで同じにする必要があります。

すべてのサブドメインのloginlogout作業を確実にするために、 session::cookieParamsプロパティをsamedomainをuser::identityCookieとして設定する必要があることに注意してください。この動作は、次のセクションで詳しく説明します。

セッションCookieパラメータ

1つのサブドメインから別のサブドメインにアクセスしている間にセッションを維持する必要がある場合や、逆に/admin URLの下にバックエンドアプリケーションをホストして別々にセッションを処理したい場合は、セッションCookieパラメータが重要です。

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow