「Django」5-Cookie&Session
Cookie
Cookie是保存在浏览器端的”键值对”,服务器端可以向用户浏览器写入Cookie,客户端每次发Http请求时,在请求头中携带当前所有可访问的cookie,常应用于登录等环节。
set_cookie
(明文)cookie默认的生命周期在浏览器关闭后就结束了。其可以访问到的域名在创建的域名及其子域下,可以访问到的路径在创建的路径下及其子路径下,可以通过设置属性改变
Set-Cookie响应头是服务器返回的响应头用来在浏览器种cookie,一旦被种下,当浏览器访问符合条件的url地址时,会自动带上这个cookie参数:
Expires=<date> -> cookie最长有效时间
;Secure -> 一个带有安全属性的 cookie 只有在请求使用SSL和HTTPS协议的时候才会被发送到服务器。
; …
1 | # login,输入表单正确 |
对应获取方式:
1 | if not request.COOKIES.get('ticket'): |
- cookie签名(加salt)
1 | obj.set_signed_cookie('ticket','you are allowed',salt="salt") |
获取时要破解:
1 | tk = request.get_signed_cookie('ticket',salt='salt') |
- 自定义签名
对于登录操作,要想将登录逻辑用到每个url,则需要用到装饰器。
Session
保存在服务端的数据(本质上是键值对)
当客户端发送请求时,服务器端生成随机字符串,每个字符串对应着相应的数据信息(用户名,id,密码等)。当发响应给客户端时,Cookie是相应的随机字符串而不是数据信息。当客户端再次发来含有Cookie的请求时,服务器端将随机字符串进行匹配,获取到该Cookie所代表的信息。
优点:防止直接泄露敏感信息给客户端。
1 | def login(request): |