cookie

  • 保存在用户浏览器端的键值对
  • 服务端可以向用户浏览器端写cookie
  • 客户端每次请求时,会携带cookie去
  1. # 获取cookie
  2. request.COOKIES
  3. request.COOKIES.get('key')
  4. # 写cookie
  5. obj = redirect('/classes/') # 跳转到指定url 可以是render() HttpResponse()
  6. obj.set_cookie('key', 'value') # 设置cookie
  7. obj.set_cookie('key', 'value', max_age=10) # 有效期10秒
  8. set_cookie参数
  9. expires=到期时间
  10. path='/' cookieurl中有效,默认为根url所有子url都有效
  11. domain=None 对域名划分 默认当前域名
  12. secure=False https 改为True
  13. httponly=False 只能http请求使用,js代码无法获取到
  14. # cookie签名
  15. # 写cookie
  16. obj.set_signed_cookie('key', 'value', salt='盐')
  17. # 读cookie
  18. request.get_signed_cookie('key', salt='盐')

Session

  • 保存在服务器端的数据(本质是键值对)
  • 依赖cookie 将sessionid写入cookie中传给浏览器
  1. # 写session 默认保存在数据库中 django_session
  2. request.session['id'] = 2
  3. request.session['username'] = 'tt'
  4. # 取session
  5. request.session.get('username')
  6. # 不存在设置,存在不设置
  7. request.session.setdefault('k1', 123)
  8. # 删除
  9. del request.session['k1']
  10. # 所有 键、值、键值对
  11. request.session.keys()
  12. request.session.values()
  13. request.session.items()
  14. request.session.iterkeys()
  15. request.session.itervalues()
  16. request.session.iteritems()
  17. # sessionid
  18. request.session.session_key
  19. # 将所有session失效日期小于当前日期的数据删除 默认为2走
  20. request.session.clear_expired()
  21. # 检查用户session的随机字符串 在数据库中是否存在
  22. request.session.exist('session_key')
  23. #删除当前用户所有session
  24. request.session.delete('sessionid')
  25. # 设置session有效期
  26. request.session.setexpir(value)
  27. # value 是整数, session会在value秒后失效
  28. # value 是datatime或timedelta, session就会在这个时间失效
  29. # value 是 0,用户关闭浏览器session就会失效
  30. # value 是 None, session 会依赖全局session失效策略

配置

  1. settings.py
  2. -----------------------------------
  3. SESSION_COOKIE_NAME = 'sessionid' # session的cookie保存在浏览器上可以名称
  4. SESSION_COOKIE_PATH = '/' # session的cookie保存的路径
  5. SESSION_COOKIE_DOMAIN = None #session的cookie保存的域名
  6. SESSION_COOKIE_SECURE = False # 是否https传输cookie
  7. SESSION_COOKIE_HTTPONLY = True # 是否session的cookie只支持http传输
  8. SESSION_COOKIE_AGE = 1209600 # session cookie失效日期(2周)
  9. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得session过期
  10. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存session,默认修改之后才保存
  11. # True 每次都会更新 有操作就不会过期
  12. # 引擎设置
  13. # 默认 (数据库)
  14. SESSION_ENGINE = 'django.contrib.sessions.backends.db'
  15. # 文件
  16. SESSION_ENGINE = 'django.contrib.sessions.backends.file'
  17. # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
  18. SESSION_FILE_PATH = 'xx/xxx'
  19. # 加密cookie 相对于使用签名cookie
  20. SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
  21. # 缓存 (大应用程序推荐)
  22. SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
  23. SESSION_CACHE_ALIAS = 'default' #缓存别名
  24. # 需配合Django缓存配置
  25. # 缓存+数据库
  26. SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'