一、关于cookie
与session
的存在位置
- 1、
cookie
存放在客户端 - 2、
session
存在在服务器端
二、一般项目中做登录拦截
- 1、在登录视图中验证用户名与密码是否正确
- 2、在服务器端利用
uuid
生成一个唯一的字符串(取名sessionid
) - 3、
sessionid
当做cookie
的值发送到客户端 - 4、
sessionid
在服务器端当做session
的key
,用户名当做value
存放到服务器端的session
中 - 5、页面重定向到主页
- 6、主页中获取客户端的
cookie
获取到的就是刚刚定义的sessionid
- 7、在服务器端读取
session
获取用户名 8、如果用户名存在就显示主页,否则重定向到登录页面
def index(request): sessionid = request.COOKIES.get('mysessionid',None) username = request.session.get(sessionid,None) if username: return render(request, 'book_index.html') else: return HttpResponseRedirect(reverse('login'))
# 用户登录视图 def login(request): if request.method == 'GET': return render(request,'login.html') elif request.method == "POST": username = request.POST.get('username') password = request.POST.get('password') # 查询数据库,判断用户名与密码正确 userModel = UserModel.objects.filter(username=username,password=password).first() if userModel: # 成功重定向到主页 response = HttpResponseRedirect(reverse("book_index")) # 1.设置一个cookie发送到客户端 sessionid = str(uuid4()) response.set_cookie("mysessionid",sessionid) # 2.设置session的值 request.session[sessionid] = userModel.username return response else: return HttpResponse(u'用户名与密码错误')
三、Django
中处理cookie
与session
的方式
1、利用自带的
session
,在登录成功的时候就把用户名与密码设置到session
中# 用户登录视图 def login(request): if request.method == 'GET': return render(request, 'login.html') elif request.method == "POST": username = request.POST.get('username') password = request.POST.get('password') # 查询数据库,判断用户名与密码正确 userModel = UserModel.objects.filter(username=username, password=password).first() if userModel: # 直接将用户名与密码设置到session中 request.session['username'] = userModel.username request.session['password'] = userModel.password return HttpResponseRedirect(reverse("book_index")) else: return HttpResponse(u'用户名与密码错误') else: return HttpResponse(u'不被处理的请求')
2、在主页面中可以获取到
session
def index(request): # 直接获取session username = request.session.get('username', None) password = request.session.get('password', None) userModel = UserModel.objects.filter(username=username).first() if userModel and password == userModel.password: return render(request, 'book_index.html') else: return HttpResponseRedirect(reverse('login'))