cookie的原理及使用
关于cookie:
1.是什么?
本质就是一个【字符串】,里面包含着浏览器和服务器沟通的信息(交互时产生的信息)。
存储的形式以:【key-value】的形式存储。
浏览器会自动携带该网站的cookie,只要是该网站下的cookie,全部携带。
2.分类:
--会话cookie(关闭浏览器后,会话cookie会自动消失,会话cookie存储在浏览器运行的那块【内存】上)。
--持久化cookie:(看过期时间,一旦到了过期时间,自动销毁,存储在用户的硬盘上,备注:如果没有到过期时间,同时用户清理了浏览器的缓存,持久化cookie也会消失)。
3.工作原理:
--当浏览器第一次请求服务器的时候,服务器可能返回一个或多个cookie给浏览器
--浏览器判断cookie种类
--会话cookie:存储在浏览器运行的那块内存上
--持久化cookie:存储在用户的硬盘上
--以后请求该网站的时候,自动携带上该网站的所有cookie(无法进行干预)
--服务器拿到之前自己“种”下cookie,分析里面的内容,校验cookie的合法性,根据cookie里保存的内容,进行具体的业务逻辑。
4.应用:
解决http无状态的问题(例子:7天免登录,一般来说不会单独使用cookie,一般配合后台的session存储使用)
5.不同的语言、不同的后端架构cookie的具体语法是不一样的,但是cookie原理和工作过程是不变的。
备注:cookie不一定只由服务器生成,前端同样可以生成cookie,但是前端生成的cookie几乎没有意义。
6.对比浏览器的本地存储:
1.localStorage:
(1).保存的数据,只要用户不清除,一直存在
(2).作为一个中转人,实现跨页签通信。
(3).保存数据的大小:5MB - 10MB
2.sessionStorage:
(1).保存的数据,关闭浏览器就消失
(3).保存数据的大小:5MB - 10MB
3.cookie:
(1).分类:会话cookie----关浏览器消失、持久化cookie----到过期时间消失
(2).保存数据的大小:4K --- 8K
(3).主要用于解决http无状态(一般配合后端的session会话存储使用)
(4).浏览器请求服务器时,会自动携带该网站的所有cookie
使用:
1.会话cookie:关闭浏览器时就会删除。
2.持久化cookie:设置时间时间一过就会删除。
会话cookie:
app.get('/demo1',function (req,res){ //express中给客户短“种”cookie不需要任何的库 let obj ={school:'atguigu',subject:'qianduan'} res.cookie('peiqi',JSON.stringify(obj)) res.send('我是路由器demo给你带来的反馈,我给你种下了一个【会话cookie】,你赶紧去浏览器里看看!') })
持久cookie:
app.get('/demo3',function (req,res) { res.cookie('zhangsan','lisi',{maxAge:3000*30}) res.send('我是路由给客户端的反馈') })
获取客户端的cookie
app.get('/demo3',function (req,res) { console.log(req.cookies) res.send('获取到了浏览器中的cookie') })
删除指定cookie:
app.get('/demo4',function(req,res){ res.clearCookie('peiqi') res.send('兄台,我删除了保存的key为peiqi的cookie') })
完整代码:
let express = require('express') let cookieParser =require('cookie-parser') let app = express() app.use(cookieParser()) //demo路由不对cookie进行任何操作 app.get('/demo',function (req,res){ res.send('我是demo路由给你的反馈 ,我没有对cookie进行任何操作') }) //会话cookie,关闭浏览器即立刻消失 //demo1路由,负责给客户短“种”下一个会话cookie app.get('/demo1',function (req,res){ //express中给客户短“种”cookie不需要任何的库 let obj ={school:'atguigu',subject:'qianduan'} res.cookie('peiqi',JSON.stringify(obj)) res.send('我是路由器demo给你带来的反馈,我给你种下了一个【会话cookie】,你赶紧去浏览器里看看!') }) //持久化cookie,设置时间,时间段过去之后就会清除 app.get('/demo2',function (req,res) { res.cookie('zhangsan','lisi',{maxAge:3000*30}) res.send('我是路由给客户端的反馈') }) //获取到浏览器中的cookie app.get('/demo3',function (req,res) { console.log(req.cookies) res.send('获取到了浏览器中的cookie') }) //删除cookie app.get('/demo4',function(req,res){ res.clearCookie('peiqi') res.send('兄台,我删除了保存的key为peiqi的cookie') }) app.listen(3200,function(err){ if (err) console.log(err) else console.log('演示启动服务器成功') })
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析