周亚博的个人博客

  • 首页
  • 盛夏光年
  • 陪风去荡
  • 布响丸啦
我频繁记录着 因为生活值得
  1. 首页
  2. 盛夏光年
  3. 正文

cookie | session

2022-09-29 56点热度 0人点赞 0条评论

一、cookie的理解

通过浏览器输入用户名和密码发送请求到服务器,后端验证通过后返回响应,并生成cookie返回通过设置Set-Cookie响应头返回客户端,客户端将收到的cookie存储,再次发起请求的时候携带cookie,服务器就会判断请求者的身份

image-20220929184056391

二、cookie | session | token

1、cookie

cookie不是缓存,而是由服务器产生,保存在客户端的键值对信息

分类:

  • 会话级cookie:保存在内存中,浏览器关闭会自动失效
  • 持久化cookie:持久化储存在硬盘中,只有失效时间到了才会自动失效

鉴权步骤:

  • 客户端第一次访问服务器的时候会生成cookie,通过响应头的Set-Cookie返回客户端

  • 客户端后续访问服务器时,请求头中都会通过cookie将本地的cookie信息传递到服务器

cookie-parser中间件用来对cookie进行解析

// 导入express
const express=require('express')
// 导入cookie中间件
const cookieParser = require('cookie-parser')

const app = express()
// 使用cookie-parser解析客户端传入的cookie  加密解密
app.use(cookieParser('aaa'))   //secret
// 向客户端发送cookie
app.get('/send',(req,res)=>{
  res.cookie('name','nihao',{maxAge:60*1000,signed:true})
  res.send('向客户端发送cookie')
})
// 接收服务器端传入的cookie
app.get('/receive',(req,res)=>{
  // cookies 是保存前面所有的cookie
  res.send('接收到的cookie-->'+req.signedCookies.name)
})

app.listen( 3000,()=>{
  console.log(`serve running at http://localhost:3000`)
})
  1. 初始化时,传入secret(参数)作为签名的秘钥。
  2. 设置cookie时,将signed设置为true,表示对cookie进行签名。
  3. 获取cookie时,可以同时通过req.cookies,也可以通过req.signedCookies获取。
2、session

相比于保存在客户端的Cookie,Session将用户交互信息保存在了服务器端,使得同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样就实现了一个ID就能在服务器取得所有的用户交互信息。

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据

node中使用session

npm install express-session
let express = require('express')
let session = require('express-session')
let app = express()
app.use(session({
  secret:'love',
  resave:false,
  saveUninitialized:true,
  cookie:{
    maxAge:1000 * 30
  }
}))

image-20220929185515193

// 设置session
router.get('/set',function(req,res,next){
  req.session.username='zhangsan'
  res.send({ code:0 })
})
// 获取session,如果没有获取到,就应该跳转到登录页面
router.get('/get',function(req,res,next){
  let username = req.session.username
  res.send({ username })
})
代码 操作
req.session.destroy(err=>{}) 销毁session
req.session.username='zhangsan' 设置session
req.session.username 获取session
req.session.cookie.maxAge=1000 重新设置过期时间
3、token

token和cookie一样都是首次登陆时,由服务器下发,都有交互时进行验证的功能

token存在哪儿都行,localstorage,sessionStorage或者cookie

  • Token完全由应用管理,所以它可以避开同源策略
  • Token可以避免CSRF攻击
  • Token可以是无状态的,可以在多个服务间共享

链接:token的使用

4、区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie 不是很安全,考虑到安全应当使用 session。

3、单个cookie不能超过 4K,很多浏览器限制一个站点最多保存20个cookie

三、缺点

因为cookie是直接保存在客户端的,用户可以直接修改cookie中的值,这就导致cookie可能出现被恶意篡改的风险,所以一般的cookie都是经过加密的。

但是签名也无法直接保证数据的安全性,因为原始值相同的情况下签名也相同

所以最好的方案就是session和cookie配置使用,根据sessionID将数据存储在后端,通过cookie将sessionID返回给客户端,cookie中就不存储敏感数据

标签: cookie session
最后更新:2022-09-29

粥呀Bo

所谓惊喜,就是苦苦等候的兔子来了,后面却跟着狼

点赞
< 上一篇
下一篇 >

文章评论

取消回复
目录
  • 一、cookie的理解
  • 二、cookie | session | token
    • 1、cookie
    • 2、session
    • 3、token
    • 4、区别
  • 三、缺点

COPYRIGHT © 2022 zhouyaker.cn. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

陕ICP备2022009272号