用JS设置cookie,用PHP问题阅读

And*_*rej 27 javascript php cookies

我正在尝试用javascript设置一个cookie,然后用php在其他页面中读取它.我可以通过编写来编写cookie

document.cookie = cookieName+"="+cookieValue;
Run Code Online (Sandbox Code Playgroud)

我部分工作.- 写了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();
}
Run Code Online (Sandbox Code Playgroud)

而在另一个页面中它无法访问,但在同一页面它可以...

EDIT3:我尝试设置域名并添加path=<?php echo $_SERVER['HTTP_HOST']; ?>到javascript代码...仍然没有..

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

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

而且我仍然可以从同一页面阅读cookie.

EDIT5:哦......我的......上帝...这一直都是一个错字...只需要删除"path =/"+" ; dom ......"我现在对自己感到羞耻...在此期间我也重置了我的饼干,所以Jared现在我不幸地接受你的帖子作为anwser ...我给我的名字带来了耻辱!!! ....

Jar*_*ish 29

请继续阅读设置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'
Run Code Online (Sandbox Code Playgroud)

注意,.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";
}
Run Code Online (Sandbox Code Playgroud)

我把这个domain=位添加到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');
Run Code Online (Sandbox Code Playgroud)

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

<pre>
<?php 

print_r($_COOKIE);

?>
Run Code Online (Sandbox Code Playgroud)

打印输出$_COOKIE将显示cookie.注意我在检查cookie时,.example.com被正确设置为域.


Sea*_*ira 5

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

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

@Jared已经发布了一个来自QuirksMode的良好链接,它提供了设置路径和域的绝佳概述,因此您可以在站点中获得所需的访问权限.

  • @Michael Jasper,不,域名是指定的目录.如果未指定目录,则使用当前目录. (2认同)