ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## cookie cookie是存储`key-value`对的一个文件,它是由服务器将cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发出请求的时候,就会把cookie附加在request里,服务器在根据request里的cookie遍历搜索是否有与之符合的信息。 实际上,客户端JS中也有生成cookie的方法,需要用到插件jquery.cookie.js。 比如在浏览器端设置每页显示的条目数量 cookie不要存储敏感信息,如密码,余额等。 ## 用法 ### 设置cookie 在对象返回给客户端之前,设置cookie ~~~ response = redirect('/page/') response.set_cookie(key,value,...) response.set_signed_cookie(key,value,salt='加密盐',...) ~~~ #### 其他参数 ~~~ max_age: cookie的生命长度,默认为None,浏览器关闭cookie立即失效 expires: cookie过期时间时间点,默认为None,浏览器关闭cookie立即失效 path: Cookie生效的路径,/ 表示根路径,根路径的cookie可以被任何url的页面访问 domain: 默认值为None,设置该 Cookie 的网页所在的域名None secure: 用来设置 Cookie 只在确保安全的请求中才会发送。当请求是 HTTPS 或者其他安全协议时,包含 secure 选项的 Cookie 才能被保存到浏览器或者发送至服务器。 httponly: 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)默认值False ~~~ >[info]如果同时设置了 max-age 和 expires,max-age 的时间为准 domain 和 path 两个选项共同决定了 Cookie 何时被浏览器自动添加到请求头部中发送出去 ### 获取cookie ~~~ request.COOKIES.get('key') request.get_signed_cookie(key, salt='', max_age=None) ~~~ #### 其他参数 ~~~ default: 默认值 salt: 加密盐 max_age: 后台控制过期时间 ~~~ ## 实例 ### 设置每页显示的条目数量 由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。每次请求时,都会发送这个cookie,浏览器获取这个cookie,设置每页显示的条目数量。 ~~~ <script src='/static/js/jquery.cookie.js'></script> $.cookie("list_pager_num", 30,{ path: '/' }); ~~~ ### cookie实现认证 登录时,密码验证通过后,将用户名作为cookie发送给客户端。 ~~~ response.set_cookie(username, username) ~~~ 用户访问需要访问认证的网页时,验证cookie是否存在,此处使用装饰器。 ~~~ def auth(func): def inner(request, *args, **kwargs): if not request.COOKIES.get(username): return render(request, 'login.html') return func(request, *args, **kwargs) return inner ~~~