Django Cookie

介绍

为什么会有cookie?

Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。

一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

怎么生成的?

一般由服务端指定,客户端也可指定。客户端(浏览器)接收并存放在本地文件下。

当然客户端也可以不接收,只需要在浏览器设置即可。

使用

获取

request.COOKIES.get("key") # 无加密

request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 有加密
参数:
#        default: 默认值
#             salt: 加密盐
#     max_age: 后台控制过期时间

设置

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 hasn't been already.)
        path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

js设置

可以通过JQuery.cookie插件进行设置,在使用之前你需要下载插件,导入时需要先导入JQuery

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("key", "value",{ path: '/' });

实例

简单的设置与获取cookie

def login(request):
    message = ""
    if request.method == "GET":
        return render(request,"login.html")
    else:
        username = request.POST.get("username")
        password = request.POST.get("password")
        if username == "root" and password == "root":
            response = redirect("/index")
            response.set_cookie("username",username) # 设置cookie
            return response
        else:
            message = "用户名或密码错误!"
            return render(request,"login.html",{"msg":message})

def index(request):
    user = request.COOKIES.get("username") # 读取cookie
    if user:
        return render(request,"index.html",{"user":user})
    else:
        return redirect("/login")
原文地址:https://www.cnblogs.com/py-peng/p/12660703.html