我使用以下内容在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
工作正常。
答案 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.com
,sub.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.com
和site1.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绝对正确。请在阅读本文时发表评论。