cookie与session¶
一、cookie¶
1. cookie常用方法¶
- set_cookie(key,value)
- max_age参数:设置超时时间,以秒为单位
- expires参数:设置超时时间,以秒为单位,针对IE浏览器
- request.COOKIES.get(key)
- delete_cookie(key)
2. 基于cookie的登录¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
二、session¶
在默认情况下操作session的时候需要django默认的一张django_session表。
django默认session的过期时间是14天
django_session表中的数据条数是取决于浏览器的,同一个计算机上(IP地址)同一个浏览器只会有一条数据生效。
1. session常用方法¶
- request.session['key'] = value
- request.session.get('key')
- request.session.set_expiry() 4种类型的参数
- 整数:秒
- 日期对象:到指定日期就失效
- 0: 一旦当前浏览器窗口关闭立刻失效
- 不写:失效时间就取决于django内部全局session默认的失效时间
- request.session.delete() 只删服务端的,客户端的不删
- request.session.flush() 浏览器和服务端都清空(推荐使用)
2. 内部原理¶
2.1 设置session时候¶
-
django内部会自动帮你生成一个随机字符串
-
django内部自动将随机字符串和对应的数据存储到django_session表中
- 先在内存中产生操作数据的缓存
- 在响应结果django中间件的时候才真正的操作数据库
-
将产生的随机字符串返回给客户端浏览器保存
-
2.2 取值时¶
- 自动从浏览器请求中获取sessionid对应的随机字符串
- 拿着该随机字符串去django_session表中查找对应的数据
- 如果比对上了 则将对应的数据取出并以字典的形式封装到request.session中
- 如果比对不上 则request.session.get()返回的是None