关于session的使用
一、关于django
中session
的使用有以下几种方式:
- 1、数据库(默认)
- 2、缓存
- 3、文件
- 4、缓存加数据库
- 5、加密
cookie
二、使用数据库存储session
django
中默认支持session
,并且默认将session
数据存储到数据库中,数据表django_session
(在注册的App
中django.contrib.sessions
)
1、在
settings.py
中基础配置(根据你需要配置,非必须的,一般默认就可以)SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认) 这里的时间是秒 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
2、关于
session
在视图中的使用1.获取、设置、删除
request.session['k1'] request.session.get('k1',None) request.session['k1'] = 123 request.session.setdefault('k1',123) # 存在则不设置 del request.session['k1']
2.所有 键、值、键值对
request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems()
3.用户
session
的随机字符串request.session.session_key
4.将所有
Session
失效日期小于当前日期的数据删除request.session.clear_expired()
5.检查用户
session
的随机字符串 在数据库中是否request.session.exists("session_key")
6.删除当前用户的所有
Session
数据request.session.delete("session_key")
7.设置
session
过期时间(在登录的视图中使用)request.session.set_expiry(value) # 如果value是个整数,session会在些秒数后失效。 # 如果value是个datatime或timedelta,session就会在这个时间后失效。 # 如果value是0,用户关闭浏览器session就会失效。 # 如果value是None,session会依赖全局session失效策略。
三、利用缓存来设置session
1、需要手动在
settings.py
中添加配置SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名 SESSION_COOKIE_SECURE = False # 是否Https传输cookie SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
2、使用方式与上面一样的
四、使用文件来设置session
1、需要手动在
settings.py
中添加配置SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名 SESSION_COOKIE_SECURE = False # 是否Https传输cookie SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
五、缓存加数据库设置session
1、手动在
settings.py
中添加配置SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
六、使用加密cookie
设置session
1、手动在
settings.py
中添加配置SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'