(一)cookie
1 获取 Cookie:
- request.COOKIES[key]
- request.get_signed_cookie(key, default=RAISE_ERROR, salt=, max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
2 设置 Cookie:
rep = HttpResponse(...) 或 rep = render(request, ...)
- rep.set_cookie(key,value,...)
- rep.set_signed_cookie(key,value,salt = 加密盐,...)
参数:
key, 键
value=, 值
max_age=None, 超时时间
expires=None, 超时时间 (IE requires expires, so set it if hasnt been already.)
path=/, Cookie 生效的路径,/ 表示根路径, 特殊的: 跟路径的 cookie 可以被任何 url 的页面访问
domain=None, Cookie 生效的域名
secure=False, https 传输
httponly=False 只能 http 协议传输, 无法被 JavaScript 获取 (不是绝对, 底层抓包可以获取到也可以被覆盖)
由于 cookie 保存在客户端的电脑上, 所以, JavaScript 和 jquery 也可以操作 cookie
- <script src=/static/js/jquery.cookie.js></script>
- $.cookie("list_pager_num", 30,{ path: / });
- (二)session
Django 中默认支持 Session, 其内部提供了 5 种类型的 Session 供开发者使用:
数据库 (默认)
缓存
文件
缓存 + 数据库
加密 cookie
1 数据库 Session
Django 默认支持 Session, 并且默认是将 Session 数据存储在数据库中, 即: django_session 表中
a. 配置 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, 默认修改之后才保存 (默认)
b. 使用
- def index(request):
- # 获取设置删除 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.set_expiry(value)
* 如果 value 是个整数, session 会在些秒数后失效
* 如果 value 是个 datatime 或 timedelta,session 就会在这个时间后失效
* 如果 value 是 0, 用户关闭浏览器 session 就会失效
* 如果 value 是 None,session 会依赖全局 session 失效策略
2 缓存 Session
a. 配置 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, 默认修改之后才保存
b. 使用
同上
View Code
3 文件 Session
a. 配置 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, 默认修改之后才保存
b. 使用
同上
View Code
4 缓存 + 数据库 Session
数据库用于做持久化, 缓存用于提高效率
a. 配置 settings.py
SESSION_ENGINE = django.contrib.sessions.backends.cached_db # 引擎
b. 使用
同上
View Code
5 加密 cookie Session
a. 配置 settings.py
SESSION_ENGINE = django.contrib.sessions.backends.signed_cookies # 引擎
b. 使用
同上
更多参考: 猛击这里
View Code
来源: http://www.bubuko.com/infodetail-2526935.html