会话技术

本文探讨了Web开发中用于识别客户端的会话技术,包括Cookie、Session和Token。Cookie由浏览器生成,有浏览器和域限制,可用于存储用户信息。Session是一种服务端会话技术,而在移动端常以JSON形式传输。Token用于验证用户身份,常通过数据库中的唯一标识生成。同时,文章还提到了CSRF(Cross-Site Request Forgery)防御机制,防止恶意跨站请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现场景:
服务器如何识别客户端,Http在web开发中基本都是短连接,一次请求的生命周期从request开始,到response就结束了

种类:Cookie:客户端回话技术,数据存储在客户端,键值对存储,支持过期时间,默认cookie会自动携带本网站所有cookie。cookie不能跨域名、跨网站,通过HttpResponse来操作cookie。
cookie使用更简洁,服务器压力小,数据不是很安全
session服务器要维护session,相对安全
token拥有session所有优点,自己维护略微麻烦,支持更多终端

cookie

cookie本身由浏览器生成,通过Response将cookie写到浏览器上,写一次访问,浏览器会根据不同的规则携带cookie过来
cookie不能跨浏览器,不能跨域名
cookie默认不支持中文,可以通过转码来实现存储中文

设置cookie,用返回给客户端的response
max_age:整数,指定cookie过期时间
expries:整数,指定过期时间,还支持是一个datetime或timedelta,可以指定一个具体日期时间
max_age和expries选一个指定即可

response.set_cookie(key,value [,max_age=None,exprise=None])
request.COOKIES.get(key)获取cookie,用客户端发来的request
response.set_signed_cookie(key, value, salt)设置加密cookie
request.get_signed_cookie(key, salt)获取加密cookie
response.delete_cookie(key)删除cookie

session

服务端会话技术request.session[key] = value # 保存session
数据存储在服务器中request.session.get(key) # 获取session
默认Session存储在内存中del request.session[key] # 删除session,只删除session_data里的数据部分
Django中默认会把Session持久化到数据库中request.session.flush() # 将cookie和数据库的session一起删除
Session在django中储存在数据库中的数据默认保留时长是14天
可以存储中文,在存储时会默认转化为unicode字符串,获取时再转回中文clear() # 清除所有会话
主键是字符串
数据使用了数据安全的,编码方式base64,在数据字符串前会添加一串混淆串"

Token

服务端会话技术
自定义的session
在web页面开发中,使用起来和session基本一致
在移动端和客户端开发中,通常以json形式传输,需要移动端自己存储token,需要获取token关联数据的时候,主动传递token

在数据库中定义一个token字段,通过定义函数为数据添加不重复的token
浏览器:将token通过cookie传给前端,前端保存后 发起请求以token识别用户
移动端:将token使用json传给移动端

CSRF 防跨站攻击

网页中使用post请求django服务器时,默认有验证csrf,

在html文件中添加{% csrf_token %}即可成功验证
防止恶意注册,确保客户端就是我们自己的客户端
使用了cookie中的csrftoken进行验证,传输
服务器发送给客户端,客户端将cookie获取过来,还要进行编码转换(数据安全)
实现过程:
在存在有{% csrf_token %}标签的html页面中,响应会自动设置一个type为hidden的cookie:csrftoken
当页面发起POST动作时,会自动验证csrftoken
验证通过则正常执行以后流程,不通过则返回403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值