介绍
为什么会有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")