当域以 www 开头时,为什么此 cookie return 不指向指定路径?

Why doesn't this cookie return to the specified path when domain starts with www?

Cookie 仅适用于没有 www 的域。字首。为什么?

当用户位于用查询字符串标识的路径上时,我希望将我的 cookie 发送到服务器。 路径始终是相同的 CGI 脚本。

问题是当有问题的页面被称为:

时,以下代码可以完美运行

http://example.com/cgi-bin/something.py?q=some_query_key

但是当它被称为:

http://www.example.com/cgi-bin/something.py?q=some_query_key

那么设置的cookie就不起作用了。 IE。即使设置了一些 cookie,当页面再次加载时它也不会返回到服务器。

import cgi
import cgitb
cgitb.enable()
import Cookie,
import datetime
import os

def setcookie (q, rated, asked, posted):
    expiration = datetime.datetime.now() + datetime.timedelta(days=3650)
    cookie = Cookie.SimpleCookie()
    cookie["session"] = "%i:%i:%i" % (rated, asked, posted)
    cookie["session"]["domain"] = "example.com"
    cookie["session"]["path"] = "/cgi-bin/something.py?q="+q
    cookie["session"]["expires"] = expiration.strftime("%a, %d-%b-%Y %H:%M:%S P$
    print cookie.output()

rated, asked, posted = (0, 0, 0)
if not os.environ.has_key("HTTP_COOKIE"):
    setcookie("some_query_key", 1, asked, posted)
else:
    cookie = Cookie.SimpleCookie(os.environ["HTTP_COOKIE"])
    rated, asked, posted = map(int, cookie["session"].value.split(":"))
print "Content-Type: text/html\n"
print "<h1>Some HTML, blah blah...</h1><br>"
print "Tuple (rated, asked, posted):", (rated, asked, posted)

这是一个示例代码,因此不包括错误处理,并且使用了虚构的域和路径。

有谁知道这里发生了什么。我在使用 Mozilla Firefox。

您需要将 cookie 设置为 .example.com 而不是 example.com 才能从子域访问。

不好意思打扰大家

加点“.”在域前面:

cookie["session"]["domain"] = ".example.com"

成功了。我知道点前缀,但我不知道即使在全球 DNS 中定义了 www 也被视为子域。

此外,这没有太大意义,因为 URL http://example.com/etc...

中没有任何地方提到点

另外,我的 Firefox 被很多测试搞糊涂了,所以它不会 return 即使有点前缀,因为域前缀为点的 cookie 和没有被认为是两个不同的cookies,即使它们应该在相同的网站上触发。 cookie 的值,即它的名称 name=value 显然没有被评估。

注1:.example.com会为example.com的每个子域发送cookie,不仅仅是www,所以指定路径控制好。

注意2:如果不设置cookie的domain属性,浏览器不会为子域设置它,只是为一个域设置,所以,如果你想让它对子域起作用,你必须设置它.

我决定不删除这个Q,而是给一个A,以便其他人遇到这个问题时可以得到更多的解释。