如何在web.py中删除/取消设置cookie
在web.py这个框架里,你可以通过 web.webapi.cookies()
来获取请求中的cookies(小甜饼),而想要设置一个cookie的值,可以用 web.webapi.setcookie(...)
。不过,文档里没有明确说明怎么 删除 一个cookie,难道只需要用 setcookie
把值设为None就可以了吗?
2 个回答
web.py 似乎没有直接删除 cookie 的方法。如果你查看一下 文档,会发现内容很少,甚至没有提到像路径这样的东西(路径可以让你把 cookie 设置在域名的特定位置)。所以我们只能去看一下 源代码。在这里,我尽管努力寻找,但还是找不到任何关于删除、移除或撤销 cookie 的方法。
不过,经过测试,使用 None 来使 cookie 过期是安全的。下面是一个简单的网页应用,可以展示这个过程。
import web
web.config.debug = False
urls = (
'/', 'index'
)
class index:
def GET(self):
c = web.cookies().get('test1')
if c:
if c=="test":
print 'this is ' + c
web.setcookie('test1', 'test2', domain = 'example.com')
else:
print c
web.setcookie('test1', 'test', domain = 'example.com' expires = None)
return c
else:
print "didnt find cookie"
web.setcookie('test1', 'test', domain = 'example.com' expires='')
return 'I set fire to the rain'
app = web.application(urls, globals())
if __name__ == "__main__":
app.run()
在这个网页应用中,首先会检查 cookie 是否存在。如果不存在,它会设置一个名为 'test1' 的 cookie,值为 'test'。在下次刷新时,它会把值改为 'test2'。再下次刷新时,它又把值改回 'test',但同时使这个 cookie 过期。这样,下一次刷新时就会显示 'I set fire to the rain'。
你说得对,从setcookie()
的文档里确实不容易看出来,或者在网上的文档中也没说得很清楚,但它的确在某个地方提到过:
在
web.setcookie()
的第三个参数(可选)“expires”中,你可以设置你的cookie什么时候过期。任何负数都会让cookie立刻过期。
举个例子,下面是我们在登出代码中做的部分(删除用户的会话cookie):
web.setcookie('session', '', expires=-1, domain=session_cookie_domain)
需要注意的是,你必须用和设置cookie时相同的域名和安全标志来删除这个cookie,否则它是删不掉的。另外,在web.py中,通常你会用web.setcookie()
来简化调用web.webapi.setcookie()
。