【发布时间】:2011-11-19 22:48:15
【问题描述】:
如果我属于no-www camp,我在http://example.com 中设置的cookie 将被http://sub-domain.example.com 读取,
无论我使用哪种语言(perl / asp.net / php / JSP),没有办法我无法解决这个问题,因为它是 HTTP 本身的基本架构,true 还是 false ?
我关心的是,是否有任何 DNS 配置会阻止 http://sub-domain.example.com 读取在 http://example.com 中设置的 cookie?
我有一个域名http://qweop.com
我在http://sd.qweop.com 有一个子域
现在,问题是即使我没有在
http://sd.qweop.com上设置任何cookie,当我读取cookie 时,那里也有cookie。他们正在从http://qweop.com读取cookie。
我该如何解决这个问题,以便子域(对子域的请求)不会读取来自主域的 cookie?
我尝试更改php setcookie 函数的第5 个参数,但它似乎没有做任何事情。基本上那个参数是没用的。我怀疑这是 HTTP 基础架构的限制。
详情:
http://qweop.com/set.php(尝试使用隐身模式以便轻松删除 cookie)
<?php setcookie("testcookie","testvalue",time()+60*60*24*30,"/","qweop.com");?>
cookies set
<?php print_r($_COOKIE); ?>
// No one had set any cookies in http://sd.qweop.com but we can see cookies here! Error!
回答:是的
经过 500 小时的谷歌研究,我最好在此处列出答案。
基本上,如果我们计划使用任何其他子域并且我们希望它们没有 cookie,我们应该始终使用 www。这是因为顶级域 cookie 存在不同的浏览器行为。
我们可以尽力告诉浏览器“嘿,只是将其设置为域而不是它的子域”,但只要 url 不是 www,它们就不会像我们一样好希望他们。
事实上,即使 url 不是非 www,他们仍然可以为所欲为,目前没有任何浏览器这样做的记录(而且很可能也是如此未来)。
【问题讨论】:
-
当您使用 php 设置 cookie 时,您可以选择设置域范围。 nz.php.net/manual/en/function.setcookie.php
-
@Dagon 我已经尝试过了,但它不起作用,除非域也与页面本身的域匹配。这对我来说似乎是一个虚假的功能。
-
发布你的 php,因为我没有问题按域设置 cookie
-
sd.qweop.com/read.php = Array(),确定你没有一些旧的 cookie,在加载页面之前你是否从浏览器中删除了所有内容。
-
如果您正在测试,请使用:
time()+5进行测试以刷新 cookie