Cookie & Session

HTTP协议无状态,为满足保留状态需求,引入Cookie和Session技术。Cookie由服务器产生内容,浏览器保存,再次访问时自动携带,但存在大小和安全问题。Session基于Cookie,随机生成字符串存于Cookie,服务器通过其找到对应值,默认在服务器端保存15天。

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

首先浏览器和万维网服务器之间相互通信的规则是HTTP协议。
而HTTP协议是无状态的,虽然HTTP协议是基于TCP协议的,但却不像TCP协议那样有链接,也就是浏览器第二次访问服务器,服务器根本不知道你之前访问过。

但是有很多需求都是要保留状态的,比如登录等等,这时候需要Cookie和Session,它们是保留状态的一种技术。不限语言和框架

**cookie的工作原理**是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。

在这里插入图片描述
Cookies分为两类,第一次get请求无所谓,第二次请求就会把上一次的response Cookies 拿来当Request Cookies带着提交请求

cookie虽然在一定程度上解决了“保持状态”的需求,但是由于cookie本身最大支持4096字节,以及cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是session

cookie本身就是一个键值对,存在于客户端,每次向服务器发送请求都带着cookie,服务端可以操作cookie

第一次:Cookie: csrftoken=hQm5UJl6eS8EfytkunJUIQrAG4SCSutz0GgdxmO1wQ51Ug28u27zHYHSCbwjgGwn;

服务端设置:`response.set_cookie(key,value)

第二次:

Cookie: csrftoken=hQm5UJl6eS8EfytkunJUIQrAG4SCSutz0GgdxmO1wQ51Ug28u27zHYHSCbwjgGwn;key=value

服务器通过request.COOKIES[key]就能记录状态了

一、操作Cookie

获取cookie:request.COOKIES[key]

设置cookie:response.set_cookie(key,value)

以上是Cookie相关,不常用

--------------------------------------分隔线---------------------------------------

下面是Session基于Cookie:

第一次:

Cookie: csrftoken=hQm5UJl6eS8EfytkunJUIQrAG4SCSutz0GgdxmO1wQ51Ug28u27zHYHSCbwjgGwn; 

服务器设置:reqeust.session[key] = value 可以多个,
同时重要的是随机生成一个字符串并设置了Cookie:sessionid=glbp556kqqb5w0fjkwltnonijoxzcwuu发给客户端

之后会把sessionid作为键,设置的多个键值整体作为一个字典当成值存储在数据库

第二次:Cookie: csrftoken=hQm5UJl6eS8EfytkunJUIQrAG4SCSutz0GgdxmO1wQ51Ug28u27zHYHSCbwjgGwn; sessionid=glbp556kqqb5w0fjkwltnonijoxzcwuu

服务器可以通过sessionid找到对应的值,通过request.session[key]获取

二、操作Session(session默认在服务器端保存15天)

获取session:request.session[key]

设置session:reqeust.session[key] = value

删除session:del request.session[key]

(这个删除其实就是把数据库的session_data更新为一个其他的值了,并没有立即删除)
request.session.set_expiry(value)

  • 如果value是个整数,session会在些秒数后失效。
  • 如果value是个datatime或timedelta,session就会在这个时间后失效。
  • 如果value是0,用户关闭浏览器session就会失效。
  • 如果value是None,session会依赖全局session失效策略。

django的session默认是存储在数据库里的,需要初始化数据库表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值