django中的Session

django中的Session

Session-Cookie机制

  • 网景公司发明了Cookie技术,为了解决浏览器端数据存储问题。
    1. 每一次request请求时,会把此域名相关的Cookie发往服务器端。服务器端也可以使用response中的set-cookie来 设置cookie值。
  • 动态网页技术,也需要知道用户身份,但是HTTP是无状态协议,无法知道。必须提出一种技术,让客户端提交的信息可以表明身份,而且不能更改。这就是Session技术。
  • Session开启后,会为浏览器端设置一个Coolie值,即SessionID.
  • 这个放置SessionID的Cookie是会话级的,浏览器不做持久化存储只放在内存中,并且浏览器关闭自动清除。浏览器端发起一个HTTP请求后,这个SessionID会通过Cookie发到服务器端,服务端就可以通过这个ID查到对应的一个字典结构。如果查无此ID,就为此浏览器重新生成一个SessionID,为它建立一个SessionID和空字典的映射关系。
  • 可以在这个ID对应的Session字典中,存入键值对来保持与当前会话相关的信息。
    1. Session会定期过期清除
    2. Session占用服务端内存
    3. Session如果没有持久化,如果服务程序崩溃,那么所有Session信息丢失
    4. Session可以持久化到数据库中,如果服务程序崩溃,那么可以从数据库中恢复

开启session支持

  • Django可以使用Session
    1. 在settings中,MIDDLEWARE设置中,启用django.contrib.sessions.middleware.SessionMiddleware
    2. 在INSTALLED_APPS设置中,启用django.contrib.sessions。它是基于数据库存储的Session。
    3. Session不使用,可以关闭上述配置,以减少开销
    4. 在数据库的表中的django_session表,记录session信息。但可以使用文件系统或其他cache来存储

登录登出实现

登录实现

  • 原来登录成功,会使用jwt的token发往客户端。现在不需要了,只需要在Session中记录登录信息即可。(Django默认请求session会持久化数据库中的django_session表中)
def jsonify(obj,allow=None,exclude=set()):
    """# 筛选对象中的属性,allow白名单,exclude黑名单"""
    if allow:
        allow = set(map(lambda x: str.lower(x), allow))
        fn = lambda x: x.name.lower() in allow
    else:
        exclude = set(map(lambda x: str.lower(x), exclude))
        fn = lambda x: x.name.lower() not 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值