wsgi cookies - 没有中间件

时间:2011-08-14 22:20:53

标签: wsgi

听起来很简单

def create_cookie():
        bag = string.ascii_uppercase + string.ascii_lowercase + string.digits
        cookie = Cookie.SimpleCookie()
        cookie['sessionid'] = ''.join(random.sample(bag,24))
        cookie['sessionid']['expires'] = 600
        return 'Set-Cookie: ', cookie.output().replace('Set-Cookie: ', '', 1)

cookie.output()是Set-Cookie:sessionid = YmsrvCMFapXk6wAt4EVKz2uU; expires = Sun,14-Aug-2011 21:48:19 GMT

    headers.append(('Content-type', 'text/html'))
    headers.append(('Content-Length', str(output_len)))
    headers.append(create_cookie)

这是我的回答 ('200 OK',[('Content-type','text / html'),('Content-Length','1204'),('Set-Cookie','sessionid = YmsrvCMFapXk6wAt4EVKz2uU; expires = Sun,14 -Aug-2011 21:48:19 GMT')],'html stuff')

这是我从环境中获得的: HTTP_COOKIE:sessionid = YmsrvCMFapXk6wAt4EVKz2uU

当我点击我页面上的其他链接时,不再有HTTP_COOKIE 使用chrome dev控制台我可以看到请求cookie和页眉包含: Cookie :: sessionid = YmsrvCMFapXk6wAt4EVKz2uU

现在,这让我感到困扰。首先为什么它有双::?我尝试在create_cookie函数中使用'Set-Cookie'而不是'Set-Cookie:'。这样做我从环境中得不到任何HTTP_COOKIE。

所以经过大量的网络搜索,每个人都在谈论中间件(不建议我用一个 - 我这样做是为了学习wsgi)......我空洞了。

1 个答案:

答案 0 :(得分:2)

隐形默认行为ftw ...

经过一些密集的调试后,我注意到以下请求中没有包含HTTP_COOKIE,这确实是浏览器端实际发送我可以在浏览器中找到的cookie的问题。

一些挖掘发现默认路径和域行为破坏了我的努力,/ action / login(设置cookie的地方)和/ display / data(未发送cookie的地方)之间的区别是通过设置修复的这种情况下的路径是'/'。

“耶”