cookie 和 session
cookie 介绍
-
cookie有服务器产生,返回给浏览器,浏览器保存
-
当再次访问服务器的时候,浏览器会携带这个网络产生的cookie
-
cookie存储在浏览器中,不安全,cookie中不要存储重要信息
from django.http import HttpResponse --设置 cookie response = HttpResponse("写入cookie到浏览器中!") response.set_cookie("name","hellow world") --获取 cookie name = request.COOKIES.get("name") --销毁 cookie response = HttpResponse("删除浏览器cookie") response.delete_cookie("name") --设置过期时间 def set_expir_cookie(request): username = 'zhangsan' if username == 'zhangsan': res = HttpResponse('登陆成功') res.set_cookie('username', username, max_age=60) # 单位是秒 return res else: return HttpResponse('登陆失败')
-
设计用户登录案例(无数据版)
效果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-so7A8LHJ-1612189055322)(image\day4\cookie.jpg)]
给浏览器返回一个登录页面
class login(View): # 处理get请求,返回页面,让前端填写 def get(self, request): return render(request, "login.html", locals())
设计一个登陆页面
# 因为是浏览器向后端发送数据所以要设置为post请求 <form action="" method="post"> <p>用户名:<input type="text" name="user"></p> <p>密码:<input type="text" name="password"></p> <button type="submit" value="登录">登录</button> </form>
处理post请求,实现登录
# 处理post请求,实现登录 def post(self, request): # 获取用户名和密码 user = request.POST.get('user') password = request.POST.get('password') # 验证用户和密码 if user == '肖战' and password == '123': # 使用cookie,生成一个钥匙,实现状态保持 response = redirect('/users/index/') # 判断用户名和密码正确以后,设置cookie response.set_cookie('user', user) # 响应,登陆成功,重定向到首页 return response else: return HttpResponse('用户名或密码错误,登陆失败')
判断浏览器中是否有该 user 的 cookie
class index(View): def get(self,request): # 获取cookie user=request.COOKIES.get('user') #如果request中有name这个cookie,说明已经登陆,返回首页 if user: return render(request, 'index.html', locals()) else: return HttpResponse('没有name这个cookie, 说明没有登陆,请先去登陆')
首页页面
<body> <h1>这是首页-----</h1> <a href="/users/logout/">退出登陆</a> </body>
退出登录
class logout(View): def get(self, request): # 删除cookie response = redirect('/users/login') response.delete_cookie('user') # 重定向到登陆页面 return response
session介绍
-
客户端访问服务端,服务端为每一个客户端返回一个唯一的sessionid
-
客户端需要保持某些状态。那么服务端会构造一个{sessionid: xxx }类似这样的字典数据加到Cookie中发送给用户,注意此时,只是一个随机字符串,返回给客户端的内容并不会像之前一样包含实际数据
-
服务端在后台把返回给客户端的xxx字符串作为key值,对应需要保存的服务端数据为一个新的字典,存储在服务器上
-
session的一些操作
设置session
def set_session(request): username = 'zhangsan' if username == 'zhangsan': request.session['uname'] = 'xxxx' return HttpResponse('登陆成功') else: return HttpResponse('登陆失败')
读取session
def get_session(request): res = resquest.session.get('uname', None) if res: return HttpResponse('当前用户:{}'.format(res)) else: return HttpResponse('获取失败')
删除session
def del_session(request):
# 清空所有缓存
request.session.clear()
# 清除指定的缓存
request.session.remove('key')
# 或者
request.session.pop('key')
设置session有效时间
def set_expir_session(request):
request.session['uname'] = 'xxxx'
request.session.set_expir(10) # 设置有效期为10秒
return HttpResponse('ok')
效时间
def set_expir_session(request):
request.session['uname'] = 'xxxx'
request.session.set_expir(10) # 设置有效期为10秒
return HttpResponse('ok')