【问题标题】:Creating a cookie using PHP but having difficulty reading from javascript使用 PHP 创建 cookie 但难以从 javascript 中读取
【发布时间】:2010-08-03 03:39:39
【问题描述】:

我使用以下方法在 PHP 中设置了我的 cookie:

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true);

当我查看存储在浏览器中的 cookie 时,它​​看起来像这样:

Name:    id
Content: 100
Domain:  .www.mydomain.com
Path:    /AP

注意 .在域中

当我在 javascript 中设置 cookie 时,我得到了相同的结果,除了:

Name:    id
Content: 100
Domain:  www.mydomain.com
Path:    /AP

域不同。为什么我的 PHP cookie 放了一个 '.'在 www.mydomain.com 和 javascript 前面没有。

以下是我用来创建 cookie 的 javascript 代码:

            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();
        }

有什么想法吗?

更新:

当我尝试在 javascript 中使用以下函数阅读此内容时:

            function ReadCookie(cookieName) {
             var theCookie=""+document.cookie;
             var ind=theCookie.indexOf(cookieName);
             if (ind==-1 || cookieName=="") return "";
             var ind1=theCookie.indexOf(';',ind);
             if (ind1==-1) ind1=theCookie.length;
             return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
        }

我无法使用 ReadCookie 函数(上图)从包含以下内容的 cookie 中获取值:

Domain: .www.mydomain.com

然而 cookie 包含:

Domain: www.mydomain.com 

工作得很好。

【问题讨论】:

  • 这个问题的标题暗示你在阅读 cookie 时遇到了困难,但问题本身并没有提到这一点……这是什么情况 - 你真的在阅读 cookie 上有困难吗?
  • @thomasrutter - 很抱歉,我完全忘了添加那部分。此后,我更新了问题以包含 ReadCookie 函数和其他相关信息。
  • 您将 cookie 设置为仅 http,这意味着 javascript 无法与之交互。去掉setcookie的最后一个参数或者设置成false,应该可以用javascript访问了。
  • @munch:这就是答案!谢谢!

标签: php javascript cookies


【解决方案1】:

所以以后有同样问题的人可以很容易地找到答案。这是我在回答表单中的评论:

您将 cookie 设置为 httponly,这意味着 javascript 无法与之交互。删除setcookie的最后一个参数或将其设置为false,您应该可以使用javascript访问它。

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", false, false);

很高兴我能帮上忙!

【讨论】:

    【解决方案2】:

    域为.www.mydomain.com 的cookie 不仅会发送到www.mydomain.com,还会发送到subdomain.www.domain.comsub.subdomain.www.domain.com 等。

    但是,我无法重现您提到的行为:

    a.php

    <?php
    setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true);
    

    HTTP 请求:

    GET /a HTTP/1.1 主机:本地主机:81 HTTP/1.1 200 正常 日期:2010 年 8 月 3 日星期二 03:49:59 GMT 服务器:Apache/2.2.13 (Win32) PHP/5.3.0 X-Powered-By: PHP/5.3.0 设置 Cookie:id=100;到期=格林威治标准时间 2010 年 8 月 4 日星期三 07:36:41;路径=/AP;域=www.mydomain.com; httponly 内容长度:0 内容类型:文本/html

    【讨论】:

      【解决方案3】:

      为什么我的 PHP cookie 放了一个 '.'在 www.mydomain.com 和 javascript 前面没有。

      PHP 可能出于兼容性原因这样做。这可能因 PHP 版本而异。

      前面的点表示 cookie 不应仅分配给指定的主机名,还应分配给该主机名下的任何子域。

      因此,为 .www.example.com 设置的 cookie 应该适用于 www.example.comsite1.www.example.com

      【讨论】:

        【解决方案4】:

        我将回答这个问题,以便我可以标记答案,但功劳归于:munch。如果他回答这个问题,我将删除它并使用他的答案。请不要“支持”我的回答。请在我原来的问题下“支持”他的评论。

        munch给出的答案:

        @Jeff V:您将 cookie 设置为仅 http,这意味着 javascript 无法与之交互。删除 setcookie 的最后一个参数或将其设置为 false,您应该可以使用 javascript 访问它。

        我立即尝试了一下,结果发现它奏效了!之后,我想知道他们到底在说什么。所以我去了:http://php.net/manual/en/function.setcookie.php 来了解这个 HTTP 参数是什么。

        httponly

        当 TRUE 时,cookie 将被制作 只能通过 HTTP 访问 协议。这意味着 cookie 无法通过脚本访问 语言,例如 JavaScript。这个 设置可以有效地帮助减少 通过 XSS 攻击窃取身份 (虽然不是所有人都支持 浏览器)。在 PHP 5.2.0 中添加。真或 错误

        munch 完全正确。请在阅读本文时发表他的评论。

        【讨论】:

          猜你喜欢
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 2014-04-19
          • 1970-01-01
          • 2010-11-24
          • 2021-02-13
          • 2016-08-12
          • 2018-11-23
          相关资源
          最近更新 更多