cookie
- 保存在用户浏览器端的键值对
- 服务端可以向用户浏览器端写cookie
- 客户端每次请求时,会携带cookie去
# 获取cookierequest.COOKIESrequest.COOKIES.get('key')# 写cookieobj = redirect('/classes/') # 跳转到指定url 可以是render() HttpResponse()obj.set_cookie('key', 'value') # 设置cookieobj.set_cookie('key', 'value', max_age=10) # 有效期10秒 set_cookie参数 expires=到期时间 path='/' cookie在url中有效,默认为根url所有子url都有效 domain=None 对域名划分 默认当前域名 secure=False https 改为True httponly=False 只能http请求使用,js代码无法获取到# cookie签名# 写cookieobj.set_signed_cookie('key', 'value', salt='盐')# 读cookierequest.get_signed_cookie('key', salt='盐')
Session
- 保存在服务器端的数据(本质是键值对)
- 依赖cookie 将sessionid写入cookie中传给浏览器
# 写session 默认保存在数据库中 django_sessionrequest.session['id'] = 2request.session['username'] = 'tt'# 取sessionrequest.session.get('username')# 不存在设置,存在不设置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()# sessionidrequest.session.session_key# 将所有session失效日期小于当前日期的数据删除 默认为2走request.session.clear_expired()# 检查用户session的随机字符串 在数据库中是否存在request.session.exist('session_key')#删除当前用户所有sessionrequest.session.delete('sessionid')# 设置session有效期request.session.setexpir(value)# value 是整数, session会在value秒后失效# value 是datatime或timedelta, session就会在这个时间失效# value 是 0,用户关闭浏览器session就会失效# value 是 None, session 会依赖全局session失效策略
配置
settings.py-----------------------------------SESSION_COOKIE_NAME = 'sessionid' # session的cookie保存在浏览器上可以名称SESSION_COOKIE_PATH = '/' # session的cookie保存的路径SESSION_COOKIE_DOMAIN = None #session的cookie保存的域名SESSION_COOKIE_SECURE = False # 是否https传输cookieSESSION_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,默认修改之后才保存 # True 每次都会更新 有操作就不会过期# 引擎设置# 默认 (数据库)SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 文件SESSION_ENGINE = 'django.contrib.sessions.backends.file'# 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()SESSION_FILE_PATH = 'xx/xxx' # 加密cookie 相对于使用签名cookieSESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 缓存 (大应用程序推荐)SESSION_ENGINE = 'django.contrib.sessions.backends.cache'SESSION_CACHE_ALIAS = 'default' #缓存别名# 需配合Django缓存配置 # 缓存+数据库SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'