使用PHP创建cookie但难以从javascript中读取

时间:2010-08-03 03:39:39

标签: php javascript cookies

我使用以下内容在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));
        }

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

Domain: .www.mydomain.com

但是包含以下内容的Cookie:

Domain: www.mydomain.com 

工作正常。

4 个答案:

答案 0 :(得分:4)

因此,具有相同问题的人可以在将来轻松找到答案。这是我在答案表单中的评论:

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

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

很高兴我能帮忙!

答案 1 :(得分:0)

包含域.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
Host: localhost:81
 
HTTP/1.1 200 OK
Date: Tue, 03 Aug 2010 03:49:59 GMT
Server: Apache/2.2.13 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Set-Cookie: id=100; expires=Wed, 04-Aug-2010 07:36:41 GMT; path=/AP; domain=www.mydomain.com; httponly
Content-Length: 0
Content-Type: text/html

答案 2 :(得分:0)

  

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

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

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

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

答案 3 :(得分:0)

我将回答这个问题,因此我可以标记一个答案,但是归功于: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中添加。是的还是   FALSE

munch绝对正确。请在阅读本文时发表评论。

相关问题