首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2:如何读取由JavaScript设置的cookie

问Yii2:如何读取由JavaScript设置的cookie
EN

Stack Overflow用户
提问于 2015-10-27 08:21:01
回答 1查看 6K关注 0票数 10

我在web/js/site.js中设置了一个cookie:

代码语言:javascript
复制
$.cookie("sidebar", "hidden", { path: '/' });

我用PHP阅读了cookie:

代码语言:javascript
复制
$sidebar_toggle_state = $_COOKIE['sidebar'];

是否也可以使用Yii请求组件来读取这样的cookie?以下代码没有读取cookie:

代码语言:javascript
复制
$sidebar_toggle_state = Yii::$app->request()->cookies()->getValue('sidebar', '');

请参阅:http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html#cookies

当我通过Yii响应组件设置一个新cookie时:

代码语言:javascript
复制
Yii::$app->response->cookies->add(new yii\web\Cookie([
    'name' => 'sidebar',
    'value' => 'hidden',
]));

然后cookie的值看起来如下(因为cookie是受保护的):

代码语言:javascript
复制
3976220a3c8e46bb641aef1da3accfb1652bffd5bb9de503a9d6882e8a69f6f9a%3A2%3A%7Bi%3A0%3Bs%3A7%3A%22sidebar%22%3Bi%3A1%3Bs%3A6%3A%22hidden%22%3B%7D

这样的cookie可以让Yii请求读取组件。但它还能读到没有保护的饼干吗?

或者,是否可以使用JavasSript / jQuery设置Yii保护的cookie(不使用AJAX)?

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 15:00:21

要读取Javascript设置的cookie,您可以在配置中使用config/web.php将一些请求组件属性设置为false,如下所示:

代码语言:javascript
复制
'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设置的cookie,如下所示:

代码语言:javascript
复制
Yii::$app->getRequest()->getCookies()->getValue('theme');

警告!

上面的解决方案可能存在安全问题,因为我们取消了所有cookies的enableCookieValidation和enableCsrfValidation。因此,还有另一种解决方案,允许跳过特定cookie的验证,假设我们刚才在上面的示例中使用的theme cookie,我们将使用getValue()方法的第二个参数,即默认值,如下所示:

代码语言:javascript
复制
Yii::$app->getRequest()->getCookies()->getValue('theme', (isset($_COOKIE['theme']))? $_COOKIE['theme']: 'theme')

上面的解决方案将允许您将enableCookieValidation和enableCsrfValidation都保持为true,并且只对特定的cookie绕过它们。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33362880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档