会话
- 从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称之为一次会话
- HTTP协议是无状态的,导致会话状态难以保护
- cookies和session就是为了保持会话状态而诞生的两个储存技术
Cookies
cookies是保存在客户端浏览器上的存储空间
- cookies在浏览器上是以键值对的形式进行存储的,键和值都是ASCII字符串的形式存储(没有中文)
- 是有存储周期的
- cookies中的数据都是按域存储隔离的,不同域之间无法访问
- cookies的内部数据会在每次访问此网址时都会携带到服务器端,如果cookies过大会降低响应速度
使用
HttpResponse.set_cookie(key,value='', max_age = None, expires = None)
- key cookie的名字
- value cook的值
- max_age cookie存活时间,秒为单位
- expire 具体过期时间
- 不知道max_age和expire时 关闭浏览器就过期
删除和使用
- 删除
HttpResponse.delete_cookie(key)
删除指定key的cookie,如果没有不会发生 - 获取
request.COOKIES cookies字典
request.COOKIES.get 温柔点的取值
session
存储在服务器端,借助cookie实现
浏览器向服务器提交数据,然后生成session存在数据库,并将sessionid 返回给浏览器,然后浏览器将sessionid作为cookie保存。每个客户端在服务器端有一个独立的session
session配置
- 在INSTALLED_APPS中添加’django.contrib.sessions’
- 在MIDDLEWARE中添加’django.contrib.sessions.middleware.SessionMiddleware’
session的使用
session对象是一个类似于字典的sessionstore类型的对象,可以用类似于字典的方式操作
session能存储字符串,整形,字典,列表等
- 保存session的值到服务器
request.session[‘key’] = value - 获取session的值
value = request.session[‘key’]
value = request.session.get(‘key’,默认值) - 删除session
del request.session[‘key’]
settint.py中的相关配置
- SESSION_COOKIE_AGE
- 指定sessionid在cookies中的保存时长(默认两周)单位是秒
- SESSION_EXPIRES_AT_BROWSER_CLOSE = True
设置只要关闭浏览器,session就失效(默认为false)
注意:服务器端将session储存在数据库中,确保之前进行过数据库的迁移migrate等
Django session的问题
- Django_session表是单表设计,随着用户增多,内容会慢慢增加的,而且过期与删除后不会自动删除数据
- 可以每晚执行python mange.py clearsessions【可以删除已经过期的session数据】