Django中session的使用

<!DOCTYPE html>


session使用详述




css

启用session


首先确认在 MIDDLEWARE_CLASSES中确保它包含'django.contrib.sessions.middleware.SessionMiddleware',若是不想使用用session会话能够删除这一项
html


配置session引擎


默认状况下,django框架会将session数据存储在数据库(django框架中默认建立的model里有存储session的model,这也是为何在使用前需执行建立数据库操做的缘由,使用django.contrib.sessions.models.Session模型)中。从数据库相比其余存储session的方式慢一点,因此能够配置django来存储session到文件系统或者缓存中。
git


使用数据库支持的session


若是你想用数据库存储session,须要添加'django.contrib.sessions' 到你的INSTALLED_APPS设置中。而且建立存储session数据的表。
github


使用基于缓存的session


使用缓存存储session,在性能上会比使用数据库更快。

使用缓存来存储session必须先进行配置缓存

缺点:本地内存使用缓存不能长时间保留数据,因此不是好的选择,并且直接使用文件或者数据库比文件或数据库缓存速度快。本地缓存系统不是多进程安全的。

使用CACHES中能够定义多个缓存,Django使用默认缓存,若要用其余缓存,能够设置SESSIONCACHEALIAS为该缓存的名字

配置好缓存以后,有两种缓存可供选择
web

  1. 对于简单的缓存session,能够设置SESSIONENGINE为'django.contrib.sessions.backends.cache',这正方式就是将数据缓存在内存中,不作持久化存储,若是缓存填满或者缓存服务器重启,缓存数据就可能会被清理掉
  2. 持久化数据缓存就要使用数据库,设置SESSIONENGINE为'django.contrib.sessions.backends.cacheddb',在写数据的时候使用缓存,读取时先读缓存中的数据,若是缓存中数据被清理了,就从数据库中读取

    两种缓存方式都很快,简单的更快一点,由于没有作数据持久化

    特殊说明:在1.7 版以前,cacheddb 永远使用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',
    }
    }

    一个字典包含全部缓存要使用的设置它是一个嵌套字典,其内容将高速缓存别名映射到包含单个高速缓存的选项的字典中。django


    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提供的缓存后端。 )。canvas


    基于文件的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的随机字符串

    request.session.session_key

    # 将全部Session失效日期小于当前日期的数据删除

    request.session.clear_expired()

    # 检查 用户session的随机字符串 在数据库中是否

    request.session.exists("session_key")

    # 删除当前用户的全部Session数据 request.session.delete("session_key") # 注销使用 request.session.clear() #设置超时时间,set_expiry(value)方法是在最后一次刷新开始计算 request.session.set_expiry(value) * 若是value是个整数,session会在些秒数后失效。 * 若是value是个datatime或timedelta,session就会在这个时间后失效。 * 若是value是0,用户关闭浏览器session就会失效。 * 若是value是None,session会依赖全局session失效策略。
相关文章
相关标签/搜索