zoukankan      html  css  js  c++  java
  • Django中session的使用

    session使用详述

    启用session

    首先确认在 MIDDLEWARE_CLASSES中确保它包含'django.contrib.sessions.middleware.SessionMiddleware',如果不想使用用session会话可以删除这一项

    配置session引擎

    默认情况下,django框架会将session数据存储在数据库(django框架中默认创建的model里有存储session的model,这也是为什么在使用前需执行创建数据库操作的原因,使用django.contrib.sessions.models.Session模型)中。从数据库相比其他存储session的方式慢一点,所以可以配置django来存储session到文件系统或者缓存中。

    使用数据库支持的session

    如果你想用数据库存储session,需要添加'django.contrib.sessions' 到你的INSTALLED_APPS设置中。并且创建存储session数据的表。

    使用基于缓存的session

    使用缓存存储session,在性能上会比使用数据库更快。
    使用缓存来存储session必须先进行配置缓存
    缺点:本地内存使用缓存不能长时间保留数据,所以不是好的选择,而且直接使用文件或者数据库比文件或数据库缓存速度快。本地缓存系统不是多进程安全的。
    使用CACHES中可以定义多个缓存,Django使用默认缓存,若要用其他缓存,可以设置SESSIONCACHEALIAS为该缓存的名字
    配置好缓存之后,有两种缓存可供选择
    1. 对于简单的缓存session,可以设置SESSIONENGINE为'django.contrib.sessions.backends.cache',这正方式就是将数据缓存在内存中,不做持久化存储,如果缓存填满或者缓存服务器重启,缓存数据就可能会被清理掉
    2. 持久化数据缓存就要使用数据库,设置SESSIONENGINE为'django.contrib.sessions.backends.cacheddb',在写数据的时候使用缓存,读取时先读缓存中的数据,如果缓存中数据被清理了,就从数据库中读取
    两种缓存方式都很快,简单的更快一点,因为没有做数据持久化
    特殊说明:在1.7 版之前,cached
    db 永远使用default缓存而不是SESSIONCACHEALIAS。
    使用缓存例子: SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSIONCACHEALIAS = 'default'#表示使用缓存的别名,在CACHES中寻找,下面有default和db1两种选择
    CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] }, 'db1': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] } }

    附加内容

    CACHES的格式,默认: { 'default':{ 'BACKEND':'django.core.cache.backends.locmen.LocMemCache', } }
    一个字典包含所有缓存要使用的设置它是一个嵌套字典,其内容将高速缓存别名映射到包含单个高速缓存的选项的字典中。

    CACHES设置必须配置‘default’缓存;还可以指定任何数量的附加高速缓存。如果您正在使用本地内存高速缓存之外的其他高速缓存后端,或者需要定义多个高速缓存,这就需要添加其他高速缓存项。以下高速缓存选项可用。 BACKEND 默认值:''(空字符串) 要使用的缓存后端。内置高速缓存后端是: 'django.core.cache.backends.db.DatabaseCache' 'django.core.cache.backends.dummy.DummyCache' 'django.core.cache.backends.filebased.FileBasedCache' 'django.core.cache.backends.locmem.LocMemCache' 'django.core.cache.backends.memcached.MemcachedCache' 'django.core.cache.backends.memcached.PyLibMCCache' 通过将BACKEND设置为缓存后端类的完全限定路径(即mypackage.backends.whatever.WhateverCache),您可以使用未随Django提供的缓存后端。 )。

    基于文件的session

    使用基于文件的session,使用SESSIONENGINE为'django.contrib.sessions.backends.file',使用SESSIONFILE_PATH设置文件的位置,如果不设会使用默认存储位置为,它的默认值来自tempfile.gettempdir()的输出,大部分情况是/tmp

    使用基于Cookie的session

    要使用基于Cookie 的会话,请设置SESSIONENGINE 为"django.contrib.sessions.backends.signedcookies"。此时,会话数据的存储将使用Django 的加密签名 工具和SECRET_KEY 设置。 注 建议保留SESSIONCOOKIEHTTPONLY 设置为True 以防止从JavaScript 中访问存储的数据。

    session的使用

        # 获取、设置、删除Session中数据
    request.session['k1']
    request.session.get('k1',None)
    request.session['k1'] = 123
    request.session.setdefault('k1',123) # 存在则不设置
    del request.session['k1']#删除某个键值对

    # 所有 键、值、键值对
    request.session.keys()
    request.session.values()
    request.session.items()
    request.session.iterkeys()
    request.session.itervalues()
    request.session.iteritems()
    # 用户session的随机字符串<br/>
    request.session.session_key<br/>
    
    # 将所有Session失效日期小于当前日期的数据删除<br/>
    request.session.clear_expired()<br/>
    
    # 检查 用户session的随机字符串 在数据库中是否<br/>
    request.session.exists(&quot;session_key&quot;)<br/>
    
    # 删除当前用户的所有Session数据<br/>
    request.session.delete(&quot;session_key&quot;)<br/>
    # 注销使用<br/>
    request.session.clear()<br/>
    #设置超时时间,set_expiry(value)方法是在最后一次刷新开始计算<br/>
    request.session.set_expiry(value)<br/>
        * 如果value是个整数,session会在些秒数后失效。<br/>
        * 如果value是个datatime或timedelta,session就会在这个时间后失效。<br/>
        * 如果value是0,用户关闭浏览器session就会失效。<br/>
        * 如果value是None,session会依赖全局session失效策略。<br/>
    

  • 相关阅读:
    【心得】软件团队Git工作流及Jira的基本知识和常见问题解释
    项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案
    Redis中的事务(多命令)操作
    Redis中的订阅模式
    Redis中有序列表(ZSet)相关命令
    Redis散列(Hash)的相关命令
    输入输出流String间的转换
    linux 常用命令
    Gradle 使用
    c 学习笔记 0
  • 原文地址:https://www.cnblogs.com/dcotorbool/p/8508725.html
Copyright © 2011-2022 走看看