Django--cookie
HTTP协议的无状态保存:
指的是同一个浏览器给服务器发两次请求,
服务器不知道第二次请求之前是否还发过请求。
每一次访问服务器都认为是新请求
cookie:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。具体一个浏览器针对一个服务器存储的key-value
有过期时间,可调,默认是两周
问题来了,是针对什么存储的呢?ip+port 还是域名?
先看上门图片中的场景,理解好三个问题,就理解了cookie机制:
1、在cookie有效期内,哪怕图中A电脑关机在开机,A电脑的浏览器访问域名y1还是会带这个cookie{is_login:true}
2、在cookie有效期内,A电脑的同一个浏览器访问域名y2不会带上域名y1的cookie,而是y2的cookie
2、如果是新的浏览器,访问这个服务器,会带一个空cookie
服务器端cookie的设置与读取:
1、设置cookie
def login(request):
login_success=1
if login_success:
#在响应体设置cookie
response=HttpResponse("登录成功") # render,redirect等也可以,都是继承的HttpResponse
response.set_cookie("is_login", True)
return response
2、读取cookie
def index(request):
cookie = request.COOKIES
# request.COOKIES.get("k","")获取不到默认为""
is_login = request.COOKIES.get("is_login")
if is_login:
#已登录
else:
#跳转到登录页面
3、删除cookie:注销的时候能用到
response.delete_cookie("cookie_key",path="/",domain=name)
4、设置cookie的参数
def set_cookie(self,
key, #键
value='', #值
max_age=None, #超时时间 cookie需要延续的时间(以秒为单位)如果参数是None,这个cookie会延续到浏览器关闭为止。
expires=None, #超时时间 expires默认None ,cookie失效的实际日期/时间。
#设置方式datetime.datetime(year=2018,month=5,day=29,hour=14)
path='/', #Cookie生效的路径,浏览器只会把cookie回传给带有该路径的页面,
#这样可以避免将cookie传给站点中的其他的应用。
#/ 表示根路径,根路径的cookie可以被任何url的视图函数获取
domain=None, #Cookie生效的域名
#你可用这个参数来构造一个跨站cookie。
#如, domain=".example.com"
#所构造的cookie对下面这些站点都是可读的:
#www.example.com 、 www2.example.com 和an.other.sub.domain.example.com
#如果该参数设置为 None ,cookie只能由设置它的站点读取。
secure=False, #如果设置为 True ,浏览器将通过HTTPS来回传cookie。
httponly=False #只能http协议传输,无法被JavaScript获取
#(不是绝对,底层抓包可以获取到也可以被覆盖
)
