设置 cookie wih JS, 读取与 PHP 问题

2022-08-30 14:55:12

我正在尝试用javascript设置一个cookie,并用php在另一个页面中阅读它。我能够通过以下方式编写饼干

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

我部分工作。- 饼干是写的,我能够阅读它,但只能在同一网页上。$_COOKIE[cookieName]

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

感谢您抽出宝贵时间接受采访!

编辑1:两个页面位于同一域中。例如。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:我尝试设置域并添加到javascript代码中...还是没有..path=<?php echo $_SERVER['HTTP_HOST']; ?>

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

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

我仍然只能从同一页面读取cookie。

编辑5:哦..我。。神。。。它一直是一个错别字...只需要删除“ path=/”+“;dom...“我现在为自己感到羞愧...与此同时,我也重置了我的饼干,所以贾里德现在我不幸地不能接受你的帖子作为anwser...我为我的名字带来了耻辱!!!....


答案 1

在此处阅读有关设置Javascript Cookie以及特定路径和域访问权限的信息:

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

我认为正在发生的事情是以下两件事之一:

  1. 您没有从同一域/子域访问 Cookie,和/或
  2. 另一个页面不是 Cookie 指定的路径的一部分。

因此,您的cookie不会向浏览器提供相关信息,以便跨子域和/或目录路径访问它。

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

请注意,这只是一个示例域(您需要在其中使用您的域),除了它跨越所有子域的初始值之外,您不需要通配符。你需要生成一个日期。来自 QuirksMode:.example.com.expires=

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";
}

我把这个位添加到了 QuirksMode 的功能中。domain=

编辑(下面的示例最初引用了我个人网站上的页面。

安德烈,这对我来说很好:

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时,.example.com 被正确设置为域。$_COOKIE


答案 2

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

如果您的PHP和.NET代码在不同的域上运行,那么浏览器将不会向域B发送请求的域A的cookie(反之亦然) - 这种同源策略的实施有助于保持Web速度(因为浏览器不必为每个请求传输所有用户的cookie,服务器也不必解析兆字节的无用数据来获取两个字段感兴趣)和安全(因为我可以从那里获得带有安全会话密钥的cookie,我可以劫持您的帐户。

@Jared已经发布了一个很好的链接 QuirksMode,它提供了设置路径和域的出色概述,因此您可以在站点中完全访问。