django2官方文档阅读记录-怎么使用session(How to use sessions)

怎么使用django的session模块

session主要是用来管理用户访问状态的。在HTTP无状态的特性下,session使用户在服务器端有了状态,减少了验证流程,提高响应效率。django本身已经封装了管理session的模块,我们来看看他是怎么样的吧。

session模块的启动与关闭

django的session管理模块,是通过中间件的方式配置使用的。

  1. 使用
    在xxx/xxx/setting.py文件的 MIDDLEWARE变量中,添加django.contrib.sessions.middleware.SessionMiddleware。

    如果你是通过命令创建的项目,这个参数已经自动添加

  2. 不使用
    如果你不需要session模块的话,最好移除MIDDLEWARE中的django.contrib.sessions.middleware.SessionMiddleware,以及 INSTALLED_APPS中的django.contrib.sessions
    这样会减少你系统的运行开销。提高效率

配置session存储形式

session的存储方式有很多种,如数据库存储,缓存存储以,文件存储以及cookie存储。session都有相对应的机制进行管理。

django默认使用的是数据库存储。
session 使用哪种机制,是通过 SESSION_ENGINE 参数控制的。
默认的参数就是 django.contrib.sessions.backends.db 即,数据库存储

  1. 数据库存储

    1. 配置
      xxx/xxx/setting.py中的INSTALLED_APPS添加django.contrib.sessions
    2. 执行
      添加好之后,执行python manage.py migrate
      这个命令会扫描项目中的model,生成对应的表。
      这里就相当于,重新扫描项目中所有的mode,并创建django.contrib.sessions.models.Session相关的数据库语句
  2. 缓存存储
    首先你要确认你启动了缓存机制。
    默认session存储在default对应的缓存中。
    如果你有多个缓存,可以在SESSION_CACHE_ALIAS中指定,你的session使用哪个缓存。
    然后,如果你设置了缓存机制的session,你有两种存储session的方式可以选择。

    1. django.contrib.sessions.backends.cache 将session存储在缓存中
    2. django.contrib.sessions.backends.cached_db 将session存储在缓存及数据库中,各一份。
      两种方式都是配置的SESSION_ENGINE 变量。第二种方式的目的,是在于session的持久化保存,防止系统重启后,session丢失。

    在官方文档中有这么一个警告。

    You should only use cache-based sessions if you’re using the Memcached cache backend. 
    The local-memory cache backend doesn’t retain data long enough to be a good choice, 
    and it’ll be faster to use file or database sessions directly instead of sending everything through the file or database cache backends. 
    Additionally, the local-memory cache backend is NOT multi-process safe, 
    therefore probably not a good choice for production environments
    

    我的理解是这样的。
    如果您使用的是Memcached缓存后端,则仅应使用基于缓存的会话。
    意思应该是就是,如果你使用django的cache-based session机制,最好使用Memcached缓存机制。
    django的缓存机制中,有基于内存、数据库、文件系统的缓存机制
    如果你想要使用基于缓存session机制,目的应该就是缓存机制的效率。
    所以两种基于内存的缓存机制 Memcached 和 local-memory 是比较合适的
    在这两个缓存机制中,最好是使用Memcached缓存机制。
    因为local-memory 缓存机制,是单进程,且线程安全的,不支持多进程通信。
    而导致session在一个进程中登录之后,在另一个进程中session失效的问题。

    这里其实并不是很懂,django并发机制

  3. 文件session

    1. 配置SESSION_ENGINE 为 django.contrib.sessions.backends.file
    2. 通过 SESSION_FILE_PATH 来设置session文件路径。默认是tempfile.gettempdir()返回的路径。
  4. cookie session

    1. 配置SESSION_ENGINE 为 django.contrib.sessions.backends.signed_cookies
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

落笔成名

客官,辛苦则个

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

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

打赏作者

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

抵扣说明:

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

余额充值