意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

cookie的原理及使用

来源:恒创科技 编辑:恒创科技编辑部
2022-08-15 15:51:11
关于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的原理及使用

    持久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('演示启动服务器成功')
})

  



上一篇: 租用美国服务器:潜在的风险与应对策略。 下一篇: 实例050:随机数