首先要问一个问题为什么存在Cookie与Session?
因为在通信的过程中,Http是一个无状态的协议。我们试着模拟一个场景,当我们登录一个网站后台,只是靠Http协议进行通信,当我们第一次登录后进入后台,我们点击后台中的功能模块,发现又跳回了登录页面。为什么会出现这种问题,这是因为后台程序中每次判断登录后的权限操作,会进行状态的判断,而http协议是无状态的协议,每次发送请求就认为是未登录的状态。
面对这种无状态的情况,Cookie与Session会话就提供了解决的方案。本篇文章只讲述Cookies,写Web应用经常会用到Cookies。Sanic可以读写Cookies,并以key-value(键值对)的方式存储。但是因为Cookies很容易被客户端修改,所以不能把登录信息直接保存到cookies里面,而是经过加密后再放到cookies。
一、读取cookies
用户(客户端)发来的数据都保存在Request对象里面,其中也包含cookies。通过该对象的cookies字典即可访问用户的cookies。
@app.route("/set_cookie")
async def set_cookie(request):
response = text("set cookie success")
response.cookies["test"] = "test"
response.cookies["test"]["max-age"] = 10
return response
二、写入Cookies
返回响应时,可以吧cookies写入到Response对象。
@app.route("/get_info")
async def get_info(request):
test = request.cookies.get("test")
return text("cookie:{}".format(test))
三、删除cookies
可以在语义上或显式删除Cookie。
@app.route("/del_info")
async def del_info(request):
response = text("delete cookie success")
del response.cookies["test"]
return response