COOKIE 译:饼干
session 译:会议
众所周知,http是无状态的,那么在各大网站的使用中,怎么知道你是已经登陆了呢?
其实,这里就用到了一个技术,就是COOKIE。COOKIE其实就是一段存在浏览器本地的不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
百度百科:https://baike.baidu.com/item/cookie/1119?fr=aladdin
简述:http在请求的过程中会会发送请求头和请求体 ,而请求头中,会包含COOKIE发送给服务器,服务器在接收到请求后,按照需求从COOKIE当中取数据,再进行业务处理,最后返回给web前端。
所以,这里,我们可以知道,之所以我们登陆了某些网站后,网站知道我们的登陆状态,就是因为有COOKIE可以携带数据访问服务器,让服务器知道我们当前的登陆状态。
当然,记录登陆状态只是一种应用场景,COOKIE还有其他的应用,比如保存一些数据呀,比如账号密码,是否记住密码等等。
而此时问题来了,如果用本地存储密码,对于安全行较高的某些场景,比如网银等,我们是不要把密码等敏感信息存在本地的,所以我们需要将这些信息存在服务器。
session就产生了,session是存储在服务器上的,技术上需要做的就是将每一个请求对应一个session_id,然后将session_id通过COOKIE传递给客户端,客户端在下次访问时,COOKIE携带着session_id提交,
服务器通过查询session_id对应的一个名称(Name)、一个值(Value),取到需要的数据,再进行业务处理,最后返回给客户端。
使用语法:
COOKIE的设置
response.set_cookie(key, value,[args])
response是Httpresponse render redirect产生的response响应对象
相关参数:
-
key:cookie的key值
-
value:cookie的value值
-
max_age: 超时时间就是在浏览器缓存中保留多少时间 单位是s 例子:10s
-
expires:作用于max_age类似如果值输入一个数字代表几天,如果输入具体时间格式为2019-9-12代表这天失效
-
path /代表全部生效 ,/aa/表示只在aa所在的域生效
-
domain: 域名表示cookie只在某个域名生效
-
secure: 对于cookies里面数据进行加密,默认为 flase为http协议,加密为ture为https协议
-
httponly: true 代表不能使用js获取cookie 通过JS获得cookies我们可以在f12里输入document.cookie获得
COOKIE的读取:
request.COOKIES.GET(key)
request.COOKIES['key']
COOKIE的删除:
response.delete_cookie('key')
del request.COOKIES[key]
session:
设置,修改
request.session['key'] = 'value'
获取
request.session.get('key')
删除
request.session.clear() # 清空的是值
request.session.flush() # 键和值一起清空
del request.session['key'] # 删除指定数据
request.session.set_expiry('value') # 过期时间设置