目录
cookie与session
cookie与session简介
最开始的网站都不需要用户注册,所有人来访问获取到的数据都是一样的,随着互联网的发展很多网站需要指定当前用户的状态.后续我们还会学习token,jwt等各种技术
cookie
保存在客户端与用户状态相关的信息
session
保存在服务端与用户状态相关的信息
补充知识: session的工作需要依赖于cookie,浏览器有资格拒绝保存服务端发送过来的cookie数据
django操作cookie
from django.shortcuts import render,HttpResponse,redirect
return render()
return HttpResponse()
return redirect()
要想操作cookie就不能直接返回HttpResponse对象 必须先用变量接收
obj1 = render()
return obj1
obj2 = HttpResponse()
return obj2
obj3 = redirect()
return obj3
用户登录功能--基础版
一个用户的登录功能
def login_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'jason' and password == '123':
obj = redirect('/home/')
obj.set_cookie('name', username)
return obj
return render(request, 'loginPage.html')
def login_auth(func_name):
def inner(request, *args, **kwargs):
if request.COOKIES.get('name'):
res = func_name(request, *args, **kwargs)
return res
return redirect('/login/')
return inner
@login_auth
def home_func(request):
return HttpResponse('home页面 只有登录的用户才可以查看')
用户登录功能--进阶版
用户没有登录之前就想访问某个网站输入用户名密码之后就应该调回该网站
def login_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'jason' and password == '123':
target_path = request.GET.get('next')
if target_path:
obj = redirect(target_path)
else:
obj = redirect('/home/')
obj.set_cookie('name', username)
return obj
return render(request, 'loginPage.html')
def login_auth(func_name):
def inner(request, *args, **kwargs):
# print(request.path) # 只获取用户输入的路由信息
# print(request.path_info) # 只获取用户输入的路由信息
target_path = request.path_info
# print(request.get_full_path()) # 获取用户输入的路由信息+问号后面携带的数据
if request.COOKIES.get('name'):
res = func_name(request, *args, **kwargs)
return res
return redirect('/login/?next=%s' % target_path)
return inner
所谓退出登录本质就是将客户端的标识用户身份的cookie删除掉
django操作session
由于session是保存在服务端上面的数据,就应该有个地方能够存储,我们只需要执行数据库迁移命令即可,django会自动创建很多需要的表.django默认的session失效时间是14天.
设置session
request.session['key']=value
1.生成一个随机字符串
2.对value的数据做加密处理,并在django_session表中存储
随机字符串>>>加密数据
3.将随机字符串也发送一份给客户端保存(cookie)
sessionid:随机字符串
获取session
request.session.get('key')
1.自动获取客户端携带的加密字符串
2.自动去django_session表中根据随机字符串获取加密的数据(比对是否有对应记录)
3.如果有自动获取加密的数据并解密到request.session.get()中
补充知识:
1.可以设置过期时间
2.存储session的数据位置也可以修改
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除当前会话的所有Session数据
request.session.delete()
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush()
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
标签:return,get,request,session,cookie,path
From: https://www.cnblogs.com/zhanglanhua/p/17011041.html