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不起作用。即即使设置了一些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上。
答案 0 :(得分:1)
您需要将Cookie设置为.example.com
而不是example.com
才能从子域中访问。
答案 1 :(得分:0)
很抱歉打扰所有人。
添加点“。”在域名前面:
func killCoins() {
for child in self.children where child is SKSpriteNode {
if child.name == "coin" {
child.removeFromParent()
}
}
}
诀窍。我知道点前缀,但我不知道www被视为子域,即使它是在全局DNS中定义的。
此外,这没有多大意义,因为在http://example.com/etc网址中没有提到点...
此外,我的Firefox与许多测试相混淆,因此即使使用点前缀也不会返回它,因为带有前缀为dot的域的cookie和不带有点的域被认为是两个不同的cookie,即使它们应该触发相同的网站。 cookie的值,即其名称=值的名称显然不会被评估。
注意1:.example.com将为example.com的每个子域发送cookie,而不仅仅是www,因此请指定控制它的路径。
注意2:如果您没有设置cookie的域属性,浏览器不会为子域设置它,只针对域,因此,如果您希望它适用于子域,则必须进行设置。
我决定不删除这个Q但是给A以便其他人在遇到这个问题时可以得到更多的解释。