一:会话技术:
1:什么是会话跟踪技术:
首先我们应该知道,什么是会话。当浏览器(客户端)第一次访问某个网站的时候(服务器)。该浏览器便和服务器建立了单独的会话。直到浏览器关闭或服务器断开。但是一个网站有许多请求,如/login/,/index/等,而http协议是一种无状态的协议,一次请求一次链接,并不会保存状态信息。而我们一些信息,常常需要多个请求之间进行交互。既然请求无法保存登陆信息,那么可以使用会话跟踪技术来保存数据信息,进而进行多个请求之间的数据互通。实现会话跟踪技术就可以使用cookie和session来吗实现。
二:cookie
1:什么是cookie
cookie是存在浏览器上的一种对象,用于保存浏览器的一些用户信息,比如登陆信息,包括登陆状态,上一次登陆时间。
优点:在用户二次登陆的情况下,可以的快速获取用户登陆状态。
缺点:因为是保存在浏览器端所以安全性差
保存方式:采用键值对的方式保存:{key:value,key:value}
2:djingo的cookie实现
1:设置cookie
def log_in(request): if request.method==‘POST‘: user = request.POST.get(‘username‘) password = request.POST.get(‘password‘) if user == ‘yjp‘ and password == ‘abc‘:#登陆验证成功 obj = redirect(‘/index‘) obj.set_cookie(‘cookie_id‘,‘cookie_value‘)#设置cookie,在浏览器存储{‘cookie_id‘:‘cookie_value‘} return obj return render(request, ‘login.html‘, locals())
2:获取cook
def index(request): co =request.COOKIES.get(‘cookie_id‘,None)#根据cooke_id获取cookie if co : return render(request, ‘index.html‘)#存在cookie跳转首页 return render(request, ‘login.html‘)#不存在 跳转登陆页
浏览器第一次请求,携带一个空的cookie,服务器相应的时候,往空的cookie,添加信息。以后的每次请求都携带该cookie.
3:删除cookie
response.delete_cookie("cookie_key",path="/",domain=name)
三:session
3.1:什么是session
session和cookie的作用一样相似,用来保存用户的状态信息。通常保存在服务器上,对用户而言,不可见,相对安全。
保存方式:使用键值对的方式保存,{key:value,key:value}
优点:相对于cookie较为安全。
缺点:通常保存在数据库上,每次保存数据都会进行数据库的读取或写入,影响效率。
3.2:session实现
def log_in2(request): if request.method==‘POST‘: user = request.POST.get(‘username‘) password = request.POST.get(‘password‘) if user == ‘yjp‘ and password == ‘abc‘:print(‘session‘,request.session) session=request.session session[‘verfiy‘] =‘is_login‘ #设置cookie obj = redirect(‘/index‘) return obj return render(request, ‘login.html‘, locals()) def index2(request): co = request.session.get(‘verfiy‘, None)#获取cookie if co == ‘is_login‘: return render(request, ‘index.html‘) return render(request, ‘login.html‘
四:djingo登陆验证,auth.利用cookie+session的保存技术
4.1:cookie+session保存过程
1:浏览器第一次发送请求的时候,发送一个空的cookie,服务器此时设置session 如{‘user‘:‘yuan‘}。
2:当session设置成功后,服务器会做两步操作。一:生成一个随机字符串,并将该字符串当作当作session_key,{‘user‘:‘yuan‘}当作session-data 存在数据库上。
第二步,生成一个cookie{‘session_id‘:‘随机字符串‘},返回浏览器。
3:浏览器下次发送请求的时候cookie={‘session_id‘:‘随机字符串‘},服务器拿到随机字符串,当作session_key,在数据库中取出session_data,这样就完成了session值的传递。
4.2:auth验证的代码实现
from django.shortcuts import render,redirect,HttpResponse import random from django.contrib import auth #导入登陆验证的模块 # Create your views here. from django.http import JsonResponse def index(request): if request.user: #判断用户是否存在 print(request.user) return render(request,‘index.html‘) else: return render(request,‘login.html‘) def login(request): if request.method==‘GET‘: return render(request,‘login.html‘) if request.method==‘POST‘: data={‘user‘:None,‘msg‘:None} print(request.POST) user =request.POST[‘user‘] pwd =request.POST[‘pwd‘] code =request.POST[‘code‘] if code.lower()==request.session[‘code‘].lower(): user=auth.authenticate(username=user,password=pwd)#登陆验证,验证用户登陆信息是否正确,正确返回一个user已经验证通过的用户 if user: auth.login(request,user)#接受一个request对象和通过登陆验证user,并完成上面三步cookie+session的设置 data[‘user‘]=True else: data[‘msg‘] = ‘用户名或密码错误‘ else: data[‘msg‘]=‘验证码错误‘ return JsonResponse(data)
def logout_view(request):
auth.logout(request)#注销用户
五:User对象:
User对象有两个属性(user,password)。可以通过request.user.is_authenticated()来验证用户登陆是否通过验证,通过验证返回true.
验证后的怎么操作和该方法无关。该方法只做验证这一个功能。
原文地址:https://www.cnblogs.com/yingjp/p/10010088.html