cookie与session
Posted chanyuli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie与session相关的知识,希望对你有一定的参考价值。
什么是cookie
cookie是保存在浏览器上的键值对
为什么会有cookie和session?
因为http协议是无状态的,没有办法记住用户是谁,是谁登录了,试想一下,当你在淘宝上看了一下午,加入了很多东西在购物车,第二天起来登录一看,发现全没了,因为浏览器根本不知道你是谁,所以就有了cookie。
是服务端设置在客户端浏览器上的键值对,也就意味着浏览器其实可以拒绝服务端的"命令"的,默认情况下 浏览器都是直接让服务端设置键值对。
那我们知道了cookie的概念之后,需要对之前学习的三板斧做出一点改变:
#变形:
obj1 = HttpResponse()
return obj1
obj2 = render()
return obj2
obj3 = redirect()
return obj3
设置cookie
obj1.set_cookie()
获取
request.COOKIES.get()
删除
obj1.delete_cookie()
什么是session
session是保存在服务器上的键值对, 在django中session默认过期的时间是14天。
request.session['key'] = value #仅仅只会在内存产生一个缓存
django内部自动生成随机的字符串,然后生成的session会存入django_session表,记得要先用 makemigration 和 migrate 命令生成表。存入了数据库之后,会把产生的随机字符串发送给浏览器,也就是 session_id ,这个是唯一的,每个用户都不一样。
如何获取session:
? request.session.get(‘key‘)
1、浏览器发送cookie到django后端之后,django会自动获取到cookie值
2、拿着随机字符串去django_session表中对比 是否有相对应的数据
3、如果比对上了,就会把随机字符串所对应的数据取出赋值给request.session,如果对不上,那request.session就时none
注意:django session表是针对浏览器的,不同的浏览器发送请求才会有不同的记录。
如何删除session
request.session.delete() # 只删除服务端的session
request.session.flush() # 浏览器和服务端全部删除
session也可以设置超时时间:
request.session.set_expiry(value多种配置)
#value是整数:session会在value秒后失效
#如果是datatime或者timedelta,session就会在这个时间之后失效
#如果是0:用户关闭浏览器session就会失效
#如果是none,session会以来全局session失效策略。
总结
用户用一个浏览器来登录,服务器获取到了他的用户信息之后,会生成一个唯一的随机的字符串返还给浏览器,然后浏览器的cookie就会把这个字符串保存下来,服务器会把用户的信息做加密处理,和这个生成的字符串按照对应存入数据库,下次用户再访问的时候,就可以通过查看cookie和数据库里的字符串是否对应,是的话就不用登陆了。要是用户注销了,服务器就会删除这条session,下次用户就需要在登陆了,下次再登录的时候获得的字符串就不一样了。
以上是关于cookie与session的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session