Django中的Cookies和Session会话保持技术

想象一个情景,我们在逛淘宝时,首先浏览器会先我登录用户,并且把数据传入服务器,可是如果服务器没有合适的方法来储存处理这些数据,等到我们要下订单付款时浏览器要是把我们的账户忘了,那将会造成很不好的消费体验,因此,Django等大部分框架都提供了Cookies和session技术来处理这个问题。

Cookies

当浏览器向服务器发送请求时,服务器会将一些数据传回浏览器并储存在浏览器内部的内存中,这部分内存叫做cookies,每次发送请求时浏览器都会将一些数据上传到服务器来供服务器使用。
在这里插入图片描述
在配置路由函数时,可以将响应对象在返回前,调用相应的函数来对cookies中的cookie数据进行“增删改查”:

  • set_cookie()为增加或者更新数据时用到的函数,其主要用到的参数有:
    • key: 设置cookie的键
    • value: 设置cookie的值
    • max_age: 该条cookie在浏览器中从生成开始保留多久,单位秒(s)
  • request.COOKIES用法和GET\POST一致,可以通过cookie的key值访问其value
  • delete_cookie(key)set_cookie用法一致,传入key值删除此条cookie数据

Session

前面的cookie很明显有一定的缺陷,如果服务器把交互数据等都储存在浏览器的cookie中,其一安全性不足,如果有密码等隐私数据,用js等就可以很轻易的取出或修改,再者刚才说了浏览器每次提交请求时都会把cookies数据全部上传到服务器,数据一旦多起来,便会造成速度变慢等问题,而session就是解决这个问题的。
session将一个浏览器发起请求所提交的数据在服务器的数据库内开辟一块内存来专门储存这个客户端,而服务器每次收到请求后都会将一个叫sessionid的值传回cookie,这个值就相当于一把钥匙,能够打开这块数据库的区域来访问里面的数据,每个客户端之间的信息是封闭的,即储存区域,sessionid不一样。
而session的增删改查均是以类似字典形式来进行的,这个“字典”即request.session
比如要增加一个key为’username’的值’Marconi’
request.session['username'] = 'Marconi'

  • 像cookies一样,session也需要设置sessionid在cookies中保存的时间,默认为14天,我们也可以在settings.py文件中增加配置项SESSION_COOKIE_AGE = time单位为秒。
  • 过期的session由于各种原因,数据库无法判断是否应该删除这些数据,因此我们需要养成习惯,每晚通过命令手动删除这些过期数据python3 manage.py clearsessions
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值