【发布时间】:2013-07-11 10:30:26
【问题描述】:
好的,这让我发疯了。我什至无法让调试代码在这里工作。
使用https://github.com/carhartl/jquery-cookie,我设置了一个cookie:
var link=$.getQueryParam('q');
var cookie_name="project_"+q+"_diff";
$.cookie(cookie_name,true,{expires:7,path:'/'});
我尝试在 PHP 脚本中读取此 cookie:
$cookie_name="project_".$q."_diff";
if($_COOKIE[$cookie_name]=='true')
{
echo "<!-- Cookie Status is TRUE -->";
// stuff
}
else
{
echo "<!-- Cookie Status is FALSE for cookie '$cookie_name' \n All cookies: ".print_r($_COOKIE,true)."\n-->";
// Other stuff
}
我在各种页面重新加载时在 Chrome 的控制台中验证 JS cookie 实际上已设置,我可以稍后访问它。
源码结果?
<!-- Cookie Status is FALSE for cookie 'project_80afd7a53462bb02dfd39e359ac3f291_diff'
All cookies: Array
(
)
-->
我还在控制台中运行了以下命令,基于另一个 StackOverflow 问题,稍后在控制台中检索了结果,但仍然没有输出到 JS。
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/; domain=.compute.amazonaws.com";
}
我没有收到任何 cookie。设置有点奇怪(在呈现的 Jinja 模板上运行 PHP),但所有其他标准变量都在工作,我只需要一个会话长的用户切换和 cookie 似乎是明显的(如果不合作的话)解决方案。如果没有人能解决这个问题,我愿意接受建议......
【问题讨论】:
-
验证浏览器是否正在向服务器发送 cookie。它将在请求标头中。
-
一个可能的原因:您的 JS 代码是从与 PHP 代码不同的域提供的,因此它创建的 cookie 是针对该域的,对您的 PHP 代码不可用。
-
我刚刚解决了这个问题,并在 Javascript 中完成了整个工作,这很有效。我认为这是因为标头和变量是在 Python 中处理的,它没有将其作为 cookie 传递给 PHP 引擎。
标签: php javascript cookies