django进阶(七)之session
session与cookie的区别
session 保留在服务器端,验证时给客户端发送随机字符串,可自定义配置,可保存在文件、缓存中,依赖cookie
cookie是一个键值对,保留在客户端
原理:
登陆前:
设置随机字符串
写到用户浏览器cookie
保存到session中
在随机字符串字典中设置相应的内容
登陆后:
获取当前用户的随机字符串
根据随机字符串获取对应信息
注意:在启用session之前,要先执行
python manage.py makemigrations
python manage.py migrate
session基础
视图函数views.py
def login(request): error_msg = "" if request.method == 'GET': return render(request,'login.html') elif request.method == "POST": u = request.POST.get('user') p = request.POST.get('password') ##如果数据库里有多个相同的数据,取第一个,如果没有就会显示none obj = models.UserInfo.objects.filter(username=u,password=p).first() if obj: ##如果存在数据(不为空)则正确 request.session['username'] = u #session设置 request.session['is_login'] = True #session设置 res = redirect('/cmdb/index/') #res.set_cookie('uname',u) return res else: error_msg = "用户名密码错误" return render(request,'login.html',{'error_msg' : error_msg}) def index(request): #v = request.COOKIES.get('uname') if request.session['is_login']: #session判断 return render(request,'index.html',{'current_user':request.session["username"]}) else: return redirect("/cmdb/login/")
在登陆页面输入用户名密码准备提交时,审查一下元素,提交,如下为获取的cookie
生成的cookie保存在数据库里
session注销及相关参数
如果想删除某个用户的session,可直接执行
del request.session['用户名']
session的其他相关参数用法
在settings.py最后添加
request.session.set_expiry(value) #设置多长时间cookie超时时间 value单位为秒 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
设置超时时间,以及缓存机制设置
说明:登陆后10秒钟,自动清除session
login.html
views.py
在settings.py文件最下面添加下面参数 ,可设置每次操作后,多长时间清除session
SESSION_SAVE_EVERY_REQUEST = True
详细参考
http://www.cnblogs.com/wupeiqi/articles/5246483.html
cache版本的缓存设置(settings.py里设置)