一、Django中操作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 request expires, so set it if hasn't been already.)
- path='/',Cookie生效的路径,/表示根路径,特殊的:根路径的Cookie可以被任何 url 的页面访问
- domain=None,Cookie生效的域名
- secure=False,https传输
- httponly=False 只能被 http 协议传输,无法被 JavaScript 获取(不是绝对,底层抓包可以获取到也可以被覆盖)
3、删除Cookie
def logout(request): rep = redirect("/login") rep.delete_cookie("user") # 删除用户浏览器上之前设置的 usercookie 值 return rep
Cookie 版登录校验
def check_login(func): @wraps(func) def inner(request, *args, **kwargs): next_url = request.get_full_path() if request.get_signed_cookie("login", salt="SSS", default=None) == 'yes': # 已经登录的用户... return func(request, *args, **kwargs) else: # 没有登录的用户,跳转到登录页面 return redirect("/login/?next={}".format(next_url)) return inner def login(request): if request.method == "POST": username = request.POST.get("username") password = request.POST.get("pasword") if username == "xxx" and pasword == "dashabi": next_url = request.GET.get("next") if next_url and next_url != "/logout/": response = redirect(next_url) else: response = redirect("/class_list/") response.set_signed_cookie("login", "yes", salt="SSS") return response return render(request, "login.html")
二、Session
Django 中默认支持 Session,其内部提供了5种类型的 Session 供开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存 + 数据库
- 加密 Cookie
1、数据库 Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
2、缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_FILE_PATH = None # 缓存 文件路径,如果为None,则使用 tempfile 模块获取一个临时地址 tempfile.gettempdir()
3、缓存 + 数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
4、加密 Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookie' # 引擎
其他共用设置项:
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_REQUEAT = False # 是否每次请求都保存 Session , 默认修改之后才保存(默认)