设置cookie wih JS,阅读PHP的问题

我试图用JavaScript来设置一个cookie,并用PHP读取其他页面。 我可以通过这样做来写这个cookie

document.cookie = cookieName+"="+cookieValue; 

我部分工作。 – Cookie被写入,我可以用$_COOKIE[cookieName]读取它,但只能在同一个网页上阅读。

这真的不是很有用。 我需要在另一个页面阅读。 我通常在asp.net和c#中开发,所以我很擅长php。 我做错了什么?

感谢您的时间!

EDIT1:两个页面在同一个域中。 site.com/index.php – > site.com/index2.php

编辑2:cookie被设置在一个页面通过:

 function SetCookie(cookieName,cookieValue,nDays) { var today = new Date(); var expire = new Date(); if (nDays==null || nDays==0) nDays=1; expire.setTime(today.getTime() + 3600000*24*nDays); document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString(); } 

在另一个页面,它不能被访问,但在同一页面,它可以…

编辑3:我试图设置域,并添加path=<?php echo $_SERVER['HTTP_HOST']; ?> path=<?php echo $_SERVER['HTTP_HOST']; ?>的JavaScript代码…仍然没有..

编辑4:到目前为止我有..

 document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_HOST']; ?>"; 

而且我仍然可以从相同的页面上只读取cookie。

EDIT5:哦,我的上帝……这是一个错字,只是需要删除“path = / ”+“ dom …”我现在对自己感到很惭愧。在此期间,我也重置我的cookies,所以贾里德现在我不幸接受你的职位作为anwser …我带来了羞辱我的名字!!! ….

阅读设置Javascript Cookie,特别是path和域访问权限:

http://www.quirksmode.org/js/cookies.html

我认为发生的事情是两件事情之一:

  1. 您不是从相同的域/子域和/或访问cookie
  2. 另一个页面不是cookie指定path的一部分。

因此,您的Cookie不会将相关信息提供给浏览器,以便通过子域和/或目录path进行访问。

 document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com' 

请注意, .example.com只是一个示例域(您需要您的域名),并且除了首字母之外,您不需要通配符. 因为它遍历所有的子域。 你需要生成expires= date。 从QuirksMode:

 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=.example.com"; } 

我添加了domain= bit到QuirksMode的函数。

编辑 (下面的例子是我个人网站上最初引用的页面)

Andrej,这对我来说非常好:

http://example.com/test.php

 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=.example.com"; } createCookie('cookieee','stuff','22'); 

http://example.com/test/test.php

 <pre> <?php print_r($_COOKIE); ?> 

$_COOKIE的打印输出将显示cookie。 注意当我检查Cookie时.example.com设置为正确的域。

Cookie只能通过在同一个域上运行的代码访问。

如果您的PHP和.NET代码运行在不同的域中,那么浏览器将不会向Domain B发送Cookie,反之亦然 – 这种同源策略的实施有助于保持Web的快速因为浏览器不必为每个请求传输一个用户的cookies,而且服务器也不需要通过兆字节的无用数据来parsing它所感兴趣的两个字段)并且安全(因为我可以劫持你的账户如果我有一个安全的会话密钥从你的cookie。)

@Jared从QuirksMode发布了一个很好的链接,可以很好地概述设置path和域的情况,因此您可以在网站中准确访问所需内容。

你能提供更多的信息吗? 他们都在同一个域只是不同的文件? 是线路

 document.cookie = cookieName+"="+cookieValue; 

你用来创buildcookie的唯一线路?

如果您想扩展可用于cookie的域,则需要将其指定为cookie的一部分:

 document.cookie = cookieName + '=' + cookieValue + '; path=/;';