2015-10-27 15 views
8
によって設定されたクッキーを、読み方

私は、Webでクッキーを設定/ JS/site.js:Yii2は:JavaScriptの

$sidebar_toggle_state = $_COOKIE['sidebar']; 

:私はPHPでクッキーを読ん

$.cookie("sidebar", "hidden", { path: '/' }); 

そのようなクッキーを読むためにYii Request Componentも使用できますか?次のコードは、クッキーを読んでいない:

$sidebar_toggle_state = Yii::$app->request()->cookies()->getValue('sidebar', ''); 

を参照してください:そして、クッキーのルックスの値を

Yii::$app->response->cookies->add(new yii\web\Cookie([ 
    'name' => 'sidebar', 
    'value' => 'hidden', 
])); 

:私はYiiのレスポンスコンポーネントを介して新しいクッキーを設定http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html#cookies

(クッキーが保護されているため)このように:

3976220a3c8e46bb641aef1da3accfb1652bffd5bb9de503a9d6882e8a69f6f9a%3A2%3A%7Bi%3A0%3Bs%3A7%3A%22sidebar%22%3Bi%3A1%3Bs%3A6%3A%22hidden%22%3B%7D 

このようなcooki eはYii要求コンポーネントを読み取ることができます。しかし、保護されていないクッキーも読むことができますか?

または、AJAXを使用せずに、Yiiで保護されたCookieをJavasSript/jQueryで設定することはできますか?

+1

Yii2で保護されているCookieを読み取ることができるJavaScript APIがあります。https://github.com/Requilence/yii2-js-cookieただし、APIはCookieを設定できません。「保護されたCookieを設定することはできませんJSでは、署名アルゴリズムの実装がクライアント側で安全でないためです。 –

+0

これを試してみました。\ yii :: $ app-> getRequest() - > getCookies() - > has( 'cookie_name');チェックのため –

+0

@NuriddinRashidovはい、私は試みました:(Yii :: $ app-> getRequest() - > getCookies() - >( 'サイドバー')){...(複数のバリエーションで)。また、私はvar_dump(Yii :: $ app-> request-> cookies)によってすべてのクッキーを表示しようとしました。しかし、肯定的な結果はありません。 –

答えて

3

のJavascriptによって設定されたCookieを読み取るには、あなたは、構成で、config/web.phpは次のようにfalseするいくつかの要求コンポーネントのプロパティを設定する必要があります。

'components' => [ 
     'request' => [ 
      // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 
      'cookieValidationKey' => 'SomeRandomStringChars', 
      'enableCookieValidation' => false, 
      'enableCsrfValidation' => false, 
     ], 

これはJavascriptを使用して設定されているクッキーを読み込むことができます次のように入力します。

Yii::$app->getRequest()->getCookies()->getValue('theme'); 

警告!私たちはすべてのクッキーについてenableCookieValidationenableCsrfValidationをキャンセルしたため

上記の解決策かもしれは、セキュリティ問題を持っています。したがって、上記の例で使用したthemeのクッキーをgetValue()という方法、つまりデフォルト値のように使用するとします。

Yii::$app->getRequest()->getCookies()->getValue('theme', (isset($_COOKIE['theme']))? $_COOKIE['theme']: 'theme') 

上記のソリューションは、あなたがtrueであることを、enableCookieValidationenableCsrfValidationを両方を維持するだけで特定のCookieのためにそれらをバイパスできるようになります。