我正在尝试使用javascript设置cookie并使用php在其他页面中读取它。 我可以通过
编写cookiedocument.cookie = cookieName+"="+cookieValue;
我部分工作。 - 写了cookie,我可以用$_COOKIE[cookieName]
来阅读它,但只能在同一个网页上阅读。
这真的不太有用。我需要在另一页中阅读。我通常在asp.net和c#中开发,所以我对php很新。我做错了吗?
感谢您的时间!
EDIT1: 两个页面都在同一个域中。例如。 site.com/index.php - > site.com/index2.php
EDIT2: 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();
}
并且在另一个页面中无法访问,但在同一页面中它可以...
EDIT3:
我尝试设置域并将path=<?php echo $_SERVER['HTTP_HOST']; ?>
添加到javascript代码中......仍然没有...
EDIT4: 到目前为止,我有..
document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_HOST']; ?>";
我仍然可以从同一页面阅读cookie。
EDIT5: 哦......我......上帝...这一直都是一个错字...只需要删除“path = / ”+“; dom ......”我为自己感到羞耻就在现在...... 在此期间我也重置了我的饼干,所以Jared现在我不幸地接受你的帖子作为anwser ... 我羞辱了我的名字!!! ....
答案 0 :(得分:29)
在此处阅读设置Javascript Cookie,特别是路径和域访问权限:
http://www.quirksmode.org/js/cookies.html
我认为发生的事情是两件事之一:
因此,您的cookie不会向浏览器提供相关信息,以便可以跨子域和/或目录路径访问它。
document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'
注意,.example.com
只是一个示例域(你需要你的域名),并且除了初始.
之外,你不需要通配符,因为它遍及所有子域。而且您需要生成expires=
日期。来自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=
位添加到QuirksMode的函数中。
编辑(以下示例最初引用了我个人网站上的网页。)
Andrej,这对我来说非常好:
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被正确设置为域。
答案 1 :(得分:5)
Cookie只能通过在同一域上运行的代码进行访问。
如果您的PHP和.NET代码在不同的域上运行,那么浏览器将不会向域A发送带有域B请求的cookie(反之亦然) - Same-Origin Policy的强制执行有助于保持网络速度快(因为浏览器不必为每个请求传输所有用户的cookie,服务器不必解析数兆字节的无用数据来获取它感兴趣的两个字段in)and secure(因为如果我有一个带有安全会话密钥的cookie,我可以劫持你的帐户。)
@Jared发布了QuirksMode的良好链接,该链接提供了优秀设置路径和域名的概述,因此您可以在网站中获得所需的访问权限。
答案 2 :(得分:2)
您能提供更多信息吗?它们是否在同一个域中只是不同的文件?是行
document.cookie = cookieName+"="+cookieValue;
您用于创建Cookie的唯一一行?
答案 3 :(得分:2)
如果您想扩展Cookie可用的域名,则需要将其指定为Cookie的一部分:
document.cookie = cookieName + '=' + cookieValue + '; path=/;';
答案 4 :(得分:0)
您需要设置cookie的路径。
例如,在javascript中,如果您未指定cookie路径,则会使用当前页面的路径进行设置。
在JS中:
用于设置Cookie:
document.cookie = "key=value; expires=Fri, 03 Aug 2018 12:00:00 UTC; path=/";
在PHP中:
用于设置Cookie:
setcookie('key', 'value', (time() + (3600*2)), '/');
用于访问:
if (isset($_COOKIE['key'])) echo $_COOKIE['key'];