一、关于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'))