Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Symfony2访问jquery中的cookie_Jquery_Cookies_Symfony - Fatal编程技术网

如何从Symfony2访问jquery中的cookie

如何从Symfony2访问jquery中的cookie,jquery,cookies,symfony,Jquery,Cookies,Symfony,因此,我希望Symfony2中的一个控制器设置一个cookie,然后如果已经设置了cookie,则让jquery脚本相应地执行操作。这似乎很简单,但既然我不能让它工作,我想我应该问一下 下面是我设置cookie的Symfony代码: // in controller $url = $this->container->get('router')->generate('_fs_feed_show'); $response = new RedirectResponse

因此,我希望Symfony2中的一个控制器设置一个cookie,然后如果已经设置了cookie,则让jquery脚本相应地执行操作。这似乎很简单,但既然我不能让它工作,我想我应该问一下

下面是我设置cookie的Symfony代码:

// in controller
    $url = $this->container->get('router')->generate('_fs_feed_show');
    $response = new RedirectResponse($url);
    $response->headers->setCookie(new Cookie('showhelp', 'true', time() + (3600 * 48)));
    return $response;
下面是我的jquery代码片段(我正在使用cookie插件)

我也试过:

if ($.cookie('showhelp', {path: '/'}) != null) {
    alert('cookie set!');
}
我使用的是chrome,通过“chromekie”扩展,我可以看到cookie已经设置好了。当我单步执行javascript调试器时,if语句的计算结果为false


有人能帮我吗?

如果您查看方法的文档,有一个名为
httponly
的参数,它确定javascript是否可以访问cookie变量。在Symfony2中,默认情况下为true。你必须把它设为假

    $response->headers->setCookie(new Cookie('showhelp', 'true', time() + (3600 * 48), '/', null, false, false));

检查中的最后一个参数httponly默认设置为false

从手册中:

如果为TRUE,则cookie将仅通过HTTP协议进行访问。这意味着脚本语言(如JavaScript)无法访问cookie。有人认为,这种设置可以有效地帮助减少通过XSS攻击进行的身份盗窃(尽管并非所有浏览器都支持这种设置),但这种说法经常引起争议。在PHP5.2.0中添加。真假

在Symfony2源代码(v2.0.12)中,它说

默认情况下,$httpOnly参数为true。这就是为什么不能使用javascript访问cookie

要解决此问题,您需要将控制器更改为:

// in controller
$url = $this->container->get('router')->generate('_fs_feed_show');
$response = new RedirectResponse($url);
$response->headers->setCookie(
    new Cookie('showhelp', 'true', time() + (3600 * 48),'/',null,false,false)
);
return $response;

为什么不能尝试会话?我可以在jquery中访问会话吗?啊,非常感谢。我最终发现了这一点,但在凌晨3点左右,我把它写成了
$response->headers->setCookie(newcookie('showhelp','true',time()+(3600*48),null,false,false))
忽略了
$path
,因此它不起作用。我不知道
$httponly
是什么意思,但我有一种感觉,如果我将其设置为
false,它可能会改变某些东西
//Symfony\Component\HttpFoundation\Cookie
public function __construct(
    $name, 
    $value = null, 
    $expire = 0, 
    $path = '/', 
    $domain = null, 
    $secure = false, 
    $httpOnly = true
)
{
 //...
}
// in controller
$url = $this->container->get('router')->generate('_fs_feed_show');
$response = new RedirectResponse($url);
$response->headers->setCookie(
    new Cookie('showhelp', 'true', time() + (3600 * 48),'/',null,false,false)
);
return $response;