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

时间:2011-02-18 18:21:13

标签: php javascript cookies

我正在尝试使用javascript设置cookie并使用php在其他页面中读取它。 我可以通过

编写cookie
document.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 ... 我羞辱了我的名字!!! ....

5 个答案:

答案 0 :(得分:29)

在此处阅读设置Javascript Cookie,特别是路径和域访问权限:

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

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

  1. 您没有从同一域/子域和/或
  2. 访问Cookie
  3. 其他页面不是cookie指定路径的一部分。
  4. 因此,您的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,这对我来说非常好:

    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被正确设置为域。

答案 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'];