django之session cookie
cookie与session
前提:由于http协议是无状态的,无法记录用户的状态,因此我们就利用cookie与session来帮助我们完成状态记录保存。
cookie
cookie就是保存在客户端浏览器上的键值对
工作原理:当你登陆成功之后 浏览器上会保存一些信息,下次再访问的时候,就会带着这些信息去访问服务端 服务端通过这些信息就可以识别出你的身份
cookie虽然是写在客户端浏览器上的 但是是服务端设置的 浏览器可以选择不服从命令 禁止写cookie 但这样 往往登录会出现错误
session
session就是保存在服务器上的键值对
session虽然是保存在服务器上的键值对,但是它是依赖于cookie工作的
服务端返回给浏览器一个随机的字符串 浏览器以键值对的形式保存 sessionid:随机字符串
浏览器在访问服务端的时候,就会将随机字符串携带上 后端获取随机字符串与后端的记录做比对
随机字符串1:数据1
随机字符串2:数据2
Django中Cookie操作
django返回给客户端浏览器的都必须是HttpResponse对象
#第一种直接返回 return HttpResponse() return render() return redirect() #第二种先实例化对象 再返回 obj1 = HttpResponse() return obj1 obj2 = render() return obj2 obj3 = redirect() return obj3
操作cookie的方法:
#设置cookie利用的就是HttpResponse对象 obj1.set_cookie('k1','v1') #获取cookie request.COOKIE.get('k1') #删除cookie obj1.delete_cookie('k1') #设置超时时间 max_age = None,超时时间 expires=None,超时时间(IE requires expires, so set it if hasn't been already.)
cookie登陆版校验

def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') if username == 'jason' and password == '123': #先获取url中get请求中携带的参数 old_url = request.GET.get('next') if old_url: #设置cookie obj = redirect(old_url) else: #如果用户直接访问的登陆页面那么直接跳到网站首页 obj = redirect('/home/') obj.set_cookie('name','jason') return obj return render(request,'login.html') def login_auth(func): @wraps(func) def inner(request,*args,**kwargs): target_url = request.get_full_path() if request.COOKIES.get('name') == 'jason': res = func(request,*args,**kwargs) return res else: return redirect('/login/?next=%s'%target_url) return inner
Django中Session操作
#设置session request.session['name'] = 'jason' """ 上面这句话发生了三件事 1.django内部自动生成了一个随机字符串 2.将随机字符串和你要保存的数据 写入django_session表中(先在内存中生成一个缓存记录,等到经过中间件的时候才会执行) 3.将产生的随机字符串发送个浏览器写入cookie sessionid:随机字符串 """ #获取session request.session.get('name') """ 上面这一句话发生了三件事 1.django内部会自动从请求信息中获取到随机字符串 2.拿着随机字符串去django_session表中去比对 3.一旦对应上了就将对应的数据解析出来放到request.session中 """ #django_session表中默认的超时时间是14天 其中的一条记录只针对一个浏览器 #删除当前会话的所有session数据 request.session.delete() #删除的是浏览器的sessionid信息 #删除当前的会话数据并删除会话的cookie request.session.flush() #将浏览器和服务端全部删除‘ # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是0,用户关闭浏览器session就会失效。 * 如果value是None,session会依赖全局session失效策略。
总结:你在后期可以i将一些数据保存到session表中,保存的数据,可以在后端任意位置获取到
万般皆下品,唯有读书高!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)