【问题标题】:JS set cookie not being read in PHPJS设置cookie未在PHP中读取
【发布时间】: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


【解决方案1】:

我也有这个问题。我通过删除 cookie 描述中的域来解决它。

例子:

document.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; 

附:我在 IE、Chrome 和 Opera 中发现了这个问题。在 Firefox 中它可以工作。

【讨论】:

  • StackOverflow 是一个英语网站。请不要使用其他语言或翻译。有兴趣的话有俄文版:ru.stackoverflow.com
【解决方案2】:

将此代码放入您的 index.php 页面中

if(isset($_COOKIE['uniqueID'])=='')
{
$uniquenum = rand(1000, 10000);
setcookie('uniqueID',$uniquenum,time() + (86400 * 7)); // 86400 = 1 day
}

比使用

获取 cookie 值
if(isset($_COOKIE['uniqueID']) && !empty($_COOKIE['uniqueID']))
{
}

【讨论】:

  • isset 返回一个布尔值,我不知道你为什么要对照一个空字符串检查它
猜你喜欢
  • 2011-06-30
  • 2018-04-12
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多