Django中Cookie的使用
1. 设置Cookie
1.1 设置Cookie及其过期时间
设置Cookie,我们需要在Django的HttpResponse中设置
设置Cookie方法 /set_cookie/?user=用户名
def set_cookie(request):
"""
定义一个设置cookie函数
用户GET请求传入表单的user值,将作为cookie的name值
"""
user = request.GET.get('user')
max_age = 60
response = HttpResponse(f'{user}登录成功,有效时间:{max_age}秒.')
response.set_cookie('name', user, max_age=max_age) # 单位秒
return response
通过浏览器工具可以看到Cookie设置成功,并且有效时间60秒
1.1 设置Cookie (set_cookie)的其他参数
key
(必需):- 类型:字符串
- 作用:指定要设置的 Cookie 的名称。
value
(可选):- 类型:字符串
- 默认值:空字符串
""
- 作用:指定要设置的 Cookie 的值。
max_age
(可选):- 类型:整数或 None
- 默认值:
None
- 作用:指定 Cookie 的最大生存时间,单位为秒。如果设置了
max_age
,则表示 Cookie 会在指定的秒数后过期。如果为None
,表示不设置最大生存时间,Cookie 在浏览器会话结束时过期。
expires
(可选):- 类型:日期时间对象或 None
- 默认值:
None
- 作用:指定 Cookie 的过期日期时间。如果设置了
expires
,则表示 Cookie 会在指定的日期时间后过期。如果为None
,表示不设置过期日期时间,Cookie 在浏览器会话结束时过期。
path
(可选):- 类型:字符串
- 默认值:
"/"
- 作用:指定 Cookie 在哪个路径下可见。例如,设置
path="/foo/"
表示该 Cookie 只在 “/foo/” 路径下可见。
domain
(可选):- 类型:字符串
- 默认值:
None
- 作用:指定 Cookie 在哪个域名下可见。例如,设置
domain=".example.com"
表示该 Cookie 在所有子域名下可见。
secure
(可选):- 类型:布尔值
- 默认值:
False
- 作用:设置为
True
表示该 Cookie 只能通过 HTTPS 连接传输。
httponly
(可选):- 类型:布尔值
- 默认值:
False
- 作用:设置为
True
表示该 Cookie 仅限于 HTTP 请求,JavaScript 无法访问。
samesite
(可选):- 类型:字符串或 None
- 默认值:
None
- 作用:指定 Cookie 的 SameSite 属性,用于控制跨站点请求时是否发送 Cookie。可选值为 “lax”、“strict” 或 None。“lax” 表示仅在顶级导航时发送,“strict” 表示在所有跨站点请求时都不发送。
#### 设置一个2023年12月31号过期的Cookie,并且设置其只能/book/中有效
def set_cookie(request):
user = request.GET.get('user')
end_time = datetime.datetime(year=2023,month=12,day=31) # 使用datetime对象
response = HttpResponse(f'{user}登录成功,有效日期截至:{end_time.strftime("%d/%m/%Y, %H:%M:%S")}')
response.set_cookie('name', user, expires=end_time,path='/book') # 直接传入datetime对象
# 这里定义了path='/book',那Cookie就只会在book及其子域名下有效
return response
已经设置成功,此时我们访问两个网站一个是 /get_cookie 一个是 /book/get_cookie
**访问/get_cookie (非book下的) **
可以发现,Cookie并没有生效,因为我们只设置了/book/路径以下的
我们再来访问/book/get_cookie
发现Cookie是正常的
2. 更新以及删除Cookie
2.1 更新Cookie
其实更新Cookie和直接设置是一样的
response = HttpResponse("更新Cookie")
response.set_cookie("cookie", "这里直接更新新的Cookie就行")
2.2 删除Cookie
2.2.1 方法1
删除cookie,我们可以调用HttpResponse对象的delete_cookie()
def del_cookie(request):
rep = HttpResponse("删除Cookie")
rep.delete_cookie('name') # 删除cookie中的name字段
return rep
2.2.2 方法2
既然Cookie能设置过期时间,也就是说Cookie过期了,就失效了,那就等同于删除
所以,我们也可以直接将Cookie的有效期,设置成0,那么Cookie直接失效,也就等于删除了
def del_cookie(request):
rep = HttpResponse("删除Cookie")
rep.set_cookie('name','',max_age=0) # 直接设置有效时间0,等同于删除
return rep
e(request):
rep = HttpResponse(“删除Cookie”)
rep.set_cookie(‘name’,‘’,max_age=0) # 直接设置有效时间0,等同于删除
return rep