yii2
クッキー
サーチ…
備考
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
はすべてのサブドメインで同じにする必要があります。
すべてのサブドメインのlogin
とlogout
作業を確実にするために、 session::cookieParams
プロパティをsamedomainをuser::identityCookie
として設定する必要があることに注意してください。この動作は、次のセクションで詳しく説明します。
セッションCookieパラメータ
1つのサブドメインから別のサブドメインにアクセスしている間にセッションを維持する必要がある場合や、逆に/admin
URLの下にバックエンドアプリケーションをホストして別々にセッションを処理したい場合は、セッションCookieパラメータが重要です。
$config = [ // ... 'components' => [ // ... 'session' => [ 'name' => 'admin_session', 'cookieParams' => [ 'httpOnly' => true, 'path' => '/admin', ], ], ], ];