会话:浏览器访问网站到结束访问是一次会话
HTTP协议是无状态的。cookies和session两个存储技术来解决无状态的问题。
1.cookies
是保存在客户端浏览器上的存储空间
在浏览器上以键值对的形式存储,存储的数据带有生命周期,安域存储隔离,不同的域之间无法访问。每次请求时,浏览器会携带cookies到服务器。
1.1 cookies的使用
HttpResponse.set_cookie(key,value='',max_age=None,expires=None)
- key cookie的名字
- value cookie的值
- max_age 存活时间,秒
- expires 具体过期时间
- 当不制定max_age或者expires时,浏览器关闭就失效
# 设置cookies
def set_cookies(request):
resp = HttpResponse('set cookies is ok')
resp.set_cookie('uuname','nicos',500)
return resp
# 获取cookies
def get_cookies(request):
resp = request.COOKIES.get('uuname','null')
return HttpResponse('cookie is :%s'%(resp))
# 删除cookies
def del_cookies(request):
resp = HttpResponse('删除COOKIES')
resp.delete_cookie('uuname')
return resp
2. session
在服务器上的空间用于保存浏览器和服务器交互的重要数据,使用session必须先启用cookie,且cookie中存储sessionid,每个客户端都可以有一个独立的session,请求者之间是独立的。sessionid 因为保存在cookies,所以生命周期和他相同
使用sessionn,检查settings.py是否添加
INSTALLED_APPS = [
’django.contrib.sessions’,
MIDDLEWARE = [
’django.contrib.sessions.middleware.SessionMiddleware’,
def set_session(request):
request.session['uuname']='wwwwww'
return HttpResponse('set session is ok')
def get_session(request):
value = request.session['uuname']
return HttpResponse(value)
settings.py中的相关配置项
1.session_cookie_age:指定sessionid在cookies中保存的时长,默认为2周。
2.session_expire_at_borwser_close=True关闭浏览器就失效
3.Django中的session数据存储在数据库中,所以使用session签,需要确保已经migrate。
4.session是持续单表涉及,且改变数据俩个持续增持
5.可以每晚执行python manage.py clearsessions,该命令删除已经过期的session数据。