会话
从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称为一次会话。
HTTP协议是无状态的,导致会话状态难以保持。
Cookies和Session就是为了保持会话状态而诞生的两种存储技术。
Cookies
Cookies是保存在客户端浏览器上的存储空间。
特点:
- cookies在浏览器上是以键值对的形式存储的,键和值都是以ASCII字符串的形式存储的(不能是中文字符串)
- 存储的数据带有生命周期
- cookies的数据是按域存储隔离的,不同的域之间无法访问
- cookies的内部的数据会在每次访问此网址时都会携带到服务器端,如果cookies过大会影响响应速度
Cookies的使用
① 存储:
HttpResponse.set_cookie(key, value="",max_age=None,expires=None)
- key:cookie的名字
- value: cookie的值
- max_age: cookie存活时间,秒为单位
- expires: 具体过期时间
- 当不指定max_age和expires时,关闭浏览器时此数据失效
def set_cookies(request):
resp = HttpResponse('set cookies is ok')
resp.set_cookie('username', 'gxn', 500)
return resp
② 删除&获取
删除Cookies
- HttpResponse.delete_cookie(key)
- 删除指定的key的cookie。如果key不存在则什么都不发生
获取Cookies
- 通过request.COOKIES绑定的字典获取客户端的COOKIES数据
- value = request.COOKIES.get(‘cookies名’,‘默认值’)
def get_cookies(request):
value = request.COOKIES.get('username')
return HttpResponse('value is %s' % (value))
def delete_cookies(request):
resp = HttpResponse('delete cookies is ok')
resp.delete_cookie('username')
return HttpResponse(resp)
Session
Session是在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据
实现方式:
- 使用session需要浏览器客户端启动cookie,并且在cookie中存储sessionid
- 每个客户端(浏览器)都可以在服务器端有一个独立的session
- 注意:不同的请求者之间不会共享这个数据,数据与请求者一一对应。
Session初始配置:
settings.py中配置session
- 向INSTALLED_APPS列表中添加,启用sessions应用:INSTALLED_APPS = ['django.contrib.sessions']
- 向MIDDLEWARE列表中添加,启用Session中间件:MIDDLEWARE = ['django.contrib.sessions.middleware.SessionMiddleware']
Session的使用
Session的对象是一个类似字典的SessionStore类型的对象,可以用类拟于字典的方式进行操作
- 保存session的值到服务器:request.session[‘KEY’] = VALUE
- 获取session的值:value = request.session[‘KEY’],value = request.session.get[‘KEY’,默认值]
- 删除session:del request.session[‘KEY’]
def set_session(request):
request.session['username1'] = 'Season'
return HttpResponse('set session is ok')
def get_session(request):
value = request.session.get('username1')
return HttpResponse('session value is %s' % (value))
settings.py中相关配置项:
- SESSION_COOKIE_AGE:指定sessionid在cookies中的保存时长(默认为两周),单位为秒
- SESSION_EXPIRE_AT_BROWSER_CLOSE = True:设置只要浏览器关闭时,session就失效(默认为False)
- python manage.py clearsessions 删除过期的session数据