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的主要内容,如果未能解决你的问题,请参考以下文章

cookie 与 session

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session

cookie与session

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

php 练习题-session与 cookie的 取值赋值

解析session与cookie