Python——Django框架(七)、Cookie和Session、有效时间、以及小案例

Python——Django框架(七)

参考博文:https://www.cnblogs.com/yuanchenqi/articles/5716193.html

Cookie和Session

一、

1、什么是Cookie和Session?

什么是Cookie和Session?

淘宝跟京东,你登录了以后,再关闭网页。过个一分钟左右,再次进去,你会发现不需要登录,这就是这个东西的用处。

再比如,我登录了以后,我把我的网址发给你,你也能登录吗?你能通过我的网址登录到我的账号里面吗?显然不能。但是自己却可以登进去。

其实Cookie就是一个键值对。这个相当于一个身份证。你第一次访问的时候,账号密码跟数据库校验,如果没有问题,就会发给你一个 Cookie 的键值对,这个里面就包含了所有的个人信息。包括用户名,订单之类的等等。

在这里插入图片描述

2、Django自带的Cookies

Django会自带Cookies,先来看看是什么:
在这里插入图片描述这是第一次请求的时候,就会发过来了。后面的 csrf 不用看,就看前面的 sessionid。可以看到是一堆字符串。

我们也可以自己设置一个 Cookie,自己设置一个一组键值对。

在这里插入图片描述
这一个 redirect ,是一个跳转函数,里面有一个返回对象。我们可以用这个,自己设置一个键值对:
在这里插入图片描述

然后走一下流程:
在这里插入图片描述
可以看到,里面有这个键值对。

这个Cookie就神奇在,你下次再请求,可以带着这个身份证来。如果你带着这个来,就给你登录成功,如果没有,就说明你没有登录过,需要你登录。那么怎么实现呢?看下图:
在这里插入图片描述
后面的这个None,是默认取不到值的时候,给的None。不写这个,你取不到值的时候就会报错。

再接着:
在这里插入图片描述
如果键值对对得上,就给你这个用户名,并且跳转到这个界面,如果不行,就让你登录。

但是这时候可能读者就觉得这只为几个人服务吗,怎么能够识别多人呢?
稍微做个修改就可以:
在这里插入图片描述
那么Cookie怎么保存用户信息呢?可以做一个大字典,里面保存用户的对应信息:
在这里插入图片描述

二、Session

但是这里就有个问题了,要是这个Cookie给别人拿到,不也可以访问你的客户端,拿到你的信息了吗?Cookie就是安全性不足。
所以,Session就出来了,跟Cookie配合使用。

Session就相当于一个钥匙,而Cookie就不放在客户端,反而放在服务端。只有你带着这个钥匙来,对得上,才能取到Cookie(你的个人信息)。

Session就是一个随机字符串,他对应的值就是一个大字典,里面包含了客户的信息。

之前我们创建数据库的时候,会创建很多表,有细心的朋友留意下就会发现里面有个是 Session表,

三、Cookie+Session来完成小案例

这里可能有个错误需要改:
在这里插入图片描述
这里的中间件可能后面需要加个 _CLASSES。

先来看下 Session里面有什么:
在这里插入图片描述
在这里插入图片描述
这个 sessionid 是Django自动给我们加的,我们可以直接拿来就用。

那么该怎么用呢?
当然是用在登录成功之后,我们可以自己设置值:
在这里插入图片描述比如上图中的这个,登录过之后,给这个设置一个值,设为True,下次再登录,就知道你登录过了。
当然,还可以放用户名:
在这里插入图片描述

之后可以给它做一个跳转:
在这里插入图片描述

跳转到主页:
在这里插入图片描述

到主页这里做个判断,如果是登录过的,就取到用户名,然后返回主页,渲染出你的用户名,比如:欢迎 xxx 。

注意:
到这里为止,就去测试的话,是会报错的,因为session里面的信息,是会放在数据库里面,但是你还没有创建对应的表,所以会报错!

所以我们要先给这个数据表初始化出来:
在这里插入图片描述
可以看到,初始化之后,是有一个session表的。这时候再去测试下,会发现可以成功!

我们再来看下session表里有什么信息:
在这里插入图片描述
可以看到,都是些看不懂的东西,这是因为安全起见,都给你做了加密。

而且我们还能给这个Cookie设置一个有效时间。就比如现在的电商网站,你关闭了网页,一段时间之内再进这个网页,也不用登录,就是这个道理。
在这里插入图片描述这个就能设置时间,时间是 10秒。这就意味着,登录之后,10秒之后,再次进入还需要登录。

但是如果时间是天数,月数,这数值不是很大吗?这里还有个参数,可以设置天数:
在这里插入图片描述
这个的意思是:从现在开始往后,三天内都不用验证登录。

但是一般推荐两个都设置。如果找不到max_age,会去找expires。
那这是用Cookie设置,怎么用Session设置呢?
在这里插入图片描述
这个删除session对应的是 注销 操作。

设置时间主要是这里:
request.session.set_expiry()
在这里插入图片描述

当然,不止能存到数据库里,还能存到文件里,存到缓存里。

Guess you like

Origin blog.csdn.net/qq_41824825/article/details/114106764