cookie 和 session
文章目录
cookies 的特点
- cookies在浏览器上是以键 - 值对的形式进行存储的,键和值都是以ASCII字符串的形存储(不能是中文字符串)
- 存储的数据带有生命周期
- cookies中的数据是按域存储隔离的,不同的域之间无法访问
- cookies的内部的数据会在每次访问此网址时都会携带到服务器端,如果cookies过大会降低响应速度
Cookies 的使用 - 存储
HttpResponse.set_cookie(key,value= , max_age=None,expires=Noe)
- 参数说明
- key: cookies 的名字
- value: cookies 的值
- max_age:cookie 存活时间,单位为秒
- expires:具体过期时间
- 当不指定 max_age 和 expires 的时候,关闭浏览器的时候自动失效
def set_cookies(requests):
resp = HttpResponse("Cookies 设置成功")
# 名字 ,值,存活时间
resp.set_cookie("uuname", "bemake", 500)
return resp
Cookies 的使用 - 删除和获取
删除 Cookies
- HttpResponse.delete_cookie(key)
- 删除指定 key 的 Cookie, 如果 key 不存在那么什么都不会发生
获取 Cookies
-
通过
request.COOKIES
绑定的字典获取客户端的 COOKIES 数据-
value = request.COOKIES.get("cookies的名字","默认值")
-
def show_cookie(request): resp = request.COOKIES.get("uuname") return HttpResponse(f'当前的 cookies 为 {resp}')
-
-
session
- 我们客户端来向我们的服务端请求开辟存储空间,我们服务端给他开了一个空间以后,分配客户端一个 sessionid ,之后我们的用户来我们的服务端我们就可以凭借这个 sessionid 来分辨到底是哪个人正在访问,同时避免了 cookies 过大导致用户打开网页时长太慢(因为数据存储在服务器)
- session是在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据
实现方式- 使用session需要在浏览器客户端启动cookie,且在cookie中存储sessionid
- 每个客户端都可以在服务器端有一个独立的Session
- 注意:不同的请求者之间不会共享这个数据,与请求者一一对
初始配置
-
在 settings.py 中配置 session
-
向 MIDDLEWARE 列表中添加
-
以上这两个默认都是开启的
session 的使用
-
session 对象是一个类似于字典的 SessionStore 类型的对象,可以用类似字典的方式进行操作
-
session 可能存储字符串,整形,字典,列表等
-
保存 session 的值到服务器
-
request.session["KEY"] = VALUE
-
def set_session(request): request.session["key"] = "bemake" return HttpResponse("session 设置成功")
-
-
-
获取 session 的值
-
value = request.session["KEY"] value = request.session.get("KEY",默认值)
-
def show_session(request): value = request.session.get('key','None') return HttpResponse(f"当前我们的 session 是 {value}")
-
-
-
删除 session
-
del request,session["KEY"]
-
-
session 的设置
- settings.py 中的相关配置项
SESSION_COOKIE_AGE
- 作用:
- 指定 sessionid 在 cookies 中保存的时间(默认为两周)
- 例如:
SESSION_COOKIE_AGE = 60*60*24*7*7(单位:秒)
- 作用:
SESSION_EXPIRE_AT_BROWSER_CLOSE = True / False
- 作用:
- 设置是否只要浏览器关闭 session 就失效(默认为 False)
- 作用:
- Django 中的 Session 数据存储在数据库中,所以使用 session 前需要确保已经执行过
migrate
session 清除过期数据
-
django_session表是单表设计
-
该表数据量会持续增加导致我们数据库越来越大[浏览器故意删掉sessionid&过期数据未删除]
-
可以每晚执行
python3 manage.py clearsessions
[该命令可删除已过期的session数据]
Cookies 和 Session 对比
种类 | 存储 | 安全性 |
---|---|---|
Cookies | 浏览器 | 相对不安全 |
session | 服务器 | 相对安全 |