cookie session

1. Cookie
本质上就是保存在浏览器上的键值对。为了解决HTTP请求是无状态。
cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。
可以用来做登录、7天免登录、浏览习惯(每页显示多少条)

Django操作Cookie:

1. 设置Cookie,是在response对象
1. 明文的
rep = 响应对象(基础必备三件套)
rep.set_cookie(key,value,...)

2. 加盐的
rep = 响应对象(基础必备三件套)
rep.set_signed_cookie(key,value,salt='加密盐',...)

2. 获取Cookie 是在request对象
1. 明文的
request.COOKIES.get("key")/request.COOKIES['key']
2. 加盐的
request.get_signed_cookie(key, default="默认值", salt='', max_age=None)

2. Session

1. 定义
保存在服务器端的键值对,依赖于Cookie

我们可以给每个客户端的cookie分配一个唯一的id,这样用户在访问时,通过cookie,服务器就知道来的人是“谁”。然后我们再根据不同的cookie的id,在服务器上保存一段时间的私密资料,如“账号密码”等等。

总结而言:cookie弥补了http无状态的不足,让服务器知道来的人是“谁”;但是cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过cookie识别不同的用户,对应的在session里保存私密的信息以及超过4096字节的文本。

另外,上述所说的cookie和session其实是共通性的东西,不限于语言和框架。


2. Django的Session操作
1. 设置Session
request.session['k1']
request.session.setdefault('k1',123) # 存在则不设置

2. 获取Session
request.session['k1']
request.session.get("k1", None)
3. 删除Session
del request.session['k1']

注销之后删除用户所有的session数据
request.session.delete()
4. 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

5. request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。

3. FBV和CBV
使用装饰器的注意事项

CBV要加装饰器需要用到method_decorator
# 导入Django提供的一个工具,把函数装饰器变成方法装饰器
from django.utils.decorators import method_decorator

原文地址:https://www.cnblogs.com/nick477931661/p/8747268.html