【问题标题】:Is this an architecture limitation of no-www? :这是无 www 的架构限制吗? :
【发布时间】: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

http://sd.qweop.com/read.php

<?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

标签: php asp.net perl jsp web


【解决方案1】:

我相信你对此无能为力。您可以尝试将 cookie 设置为:

setcookie('some_name', 'some_val', 0, '/', 'yourdomain');

但它将被设置为yourdomain 的所有子域,即使RFC 2109 表示如果cookie 要匹配子域,它应该用一个点设置为.yourdomain。所有主要浏览器都将其发送到子域。我用 IE、FF 和 Chrome 查了一下。

【讨论】:

  • 嗯,无论如何要破解它?这是一个 PHP 唯一的问题,还是无论我使用什么语言(perl 等),仍然没有办法解决它? (顺便说一句,对于我来说,路径必须是 /,因为 cookie 需要设置为 http://qweop.com 而不是 http://qweop.com/some-folder
  • 在这种情况下路径无关紧要。它绝对与 PHP 无关。 PHP 将以正确的方式发送它的会话 cookie:Set-Cookie PHPSESSID=dsle71ekd90pu9ngmdonmq0ee3; path=/; domain=.yourdomain 正如你可以看到的点。问题是浏览器不遵循规范,并将domain=yourdomain 视为domain=.yourdomain 我想不出办法解决这个问题,只能选择 yes-www.org
【解决方案2】:

不幸的是,DNS 配置与 cookie 完全无关(当然,只要它们属于同一个二级域)。

如果你问一个实际的问题,你仍然可以得到一个实际的答案。

【讨论】:

  • 我问了一个实际问题。
  • 不,根据您自己的评论,您正在寻找纯理论知识,而不是解决任何实际问题
  • 我不是。我有一个需要解决的实际问题,我正在寻找纯粹的实用知识。查看编辑后的帖子。
猜你喜欢
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2011-12-17
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多