Django实战007:Cookie搭配Session使用

Cookie的作用

前面我们说道Django实战006:Cookie设置及跨域问题处理,Cookie可以在浏览器端保存用户数据,当用户访问服务器时会提交Cookie给服务器,Cookie附加了当前状态, 服务器可以通过Cookie来标识用户的登录状态,起到简单的用户身份识别和用户信息记录等作用。

Cookie登录的实现过程

1.用户通过form表单提交自己的用户名和密码,这通常是一个POST的 HTTP请求。

2.服务器拿到用户的信息开始验证用户名与密码,如果与数据库匹配成功我们就返回200同时设置一个Set-Cookie抛给浏览器,通过为‘键’=‘值’形式 。

3.浏览器接收到服务器响应返回的数据和Cookie,然后将Cookie存起来,在开发者application中可以查看到。

4.浏览器再次发送请求时,将设置了‘键’=‘值’的Cookie再次抛给服务器,服务器通过Cookie的字段判断用户已经登录,则根据需求处理用户请求,否则返回400提示用户先登录。

Cookie的安全隐患

这就是Cookie的实现过程,这里有个很明显的问题就是服务器只要识别到正确的Cookie就会处理对应的数据,那么有心人只要想办法截获(很多HTTP客户端软件都可以发送任意的HTTP请求)你的Cookie就可以冒充用户来访问该服务器并获取到用户的所有信息,这对用户来说会存在着极大的安全隐患。

Session的引进

session和cookie功能差不多,同样是用来记录用户信息和维持会话状态的,但是session是依赖cookie的。session不同在于将用户数据存储在服务器端(用户拿到session内的具体内容),Cookie则是将数据存储在浏览器端,所以相对cookie来说,session相对安全多了,我们只需要在设置Cookie时附带上session的id,当用户再次访问服务器时将session的id抛给服务器进行效验。

Session的启用

Django中使用session很简单,Django封装了session模块,默认在我们创建项目的时候就已经启用了,在数据库中可以找到一个名为django_session的数据库表,这个就是用来存放session数据的。

Session的使用

设置保存session数据,通过reques.session['键']='值'的方式来设置指定存储的session信息,通过浏览器访问该视图就可以将session设置的信息以base64编码存入到django_session数据库表中。

读取session数据,同样很简单通过request.session.get('键')来获取对应的值,通过该方法可以从django_session数据库表中读取到对应键的值。

 Session搭配Cookie使用

在cookie中传入sessionid作为前端的存储值,这里为了保证sessionid的唯一性,我最简单的方法是用uuid来生成随机字符串,再在sessionid中设置session值,再给set_cookie设置个过期时间,这样只要时间一到又会重新生成一个新的sessionid来(如果你觉得uuid4()还是会出现重复也可以自行定义)。

在浏览器端看到的就是一串随机的字符串,当用户访问服务器时cookie会把sessionid抛给服务器,服务器验证sessionid对应的值是否为django_session数据库表中读取到对应键的值,如果是则执行数据请求操作,否则返回400,告诉前端操作失败。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProgramNotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值