【问题标题】:Why doesn't this cookie return to the specified path when domain starts with www?为什么域以www开头时这个cookie没有返回到指定的路径?
【发布时间】:2016-01-01 22:47:30
【问题描述】:

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。

【问题讨论】:

    标签: python http cookies cgi


    【解决方案1】:

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

    【讨论】:

    • 对不起,我没有及时看到你的 A,无论如何 +1。出于绝望,我独自尝试了它,它奏效了。顺便说一句,我的万维网。网站没有注册为子域,这就是为什么我对整个故事完全困惑的原因。我的回答更广泛一些,所以如果某些事情没有改变,我会将其标记为已接受,而不是您的。还是谢谢!
    【解决方案2】:

    打扰大家了。

    添加一个点“。”在域前面:

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

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

    此外,这没有多大意义,因为 URL http://example.com/etc...中没有提到该点...

    另外,我的 Firefox 对很多测试感到困惑,因此即使使用点前缀也不会返回它,因为带有点前缀的域的 cookie 和一个不带点前缀的 cookie 被认为是两个不同的 cookie,即使它们应该在相同的网站上触发。 cookie 的值,即 name=value 的名称显然没有被评估。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2013-03-31
      • 2013-03-25
      • 1970-01-01
      • 2019-03-15
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多