2021-09-10 cookie、session、token

1 篇文章 0 订阅
1 篇文章 0 订阅

11.11

http无状态的


cookie

在浏览器保存一下数据,每次请求的时候都会带过来;
大小限制4K,有session的ID;
保存到客户端不安全
在这里插入图片描述


session

因为cookie的不安全,session应运而生;
保存数据的,保存在服务端
大小无限
基于cookie,不是单独存在的;
cookie中会有一个sessionid,服务器利用 sessionid 找到session文件、读写、写入 ;

隐患:
session_id劫持


下载安装

 npm i express express-static cookie-parser cookie-session

以下的代码自动加上

const express = require('express')
var server = express()
server.listen(8989)

cookie使用【不建议使用这个,不建议去加密cookie】

空间小—节省
安全性差
1、精打细算
2、校验是否被篡改

cookie-parser 签名
cookie-encrypter对cookie加密加密

发送cookie
//cookie
server.use('/',function (req,res) {
    //path是在什么路径下有效
    //maxAge有效期
    res.cookie('user','xxxx',{path:'/aaa',maxAge:30*24*3600*1000})//设置cookie
    res.send('ok')
})
读取cookie

cookie-parser

var secretStr='whhhhsnsmjsjsd'
//读取cookie
server.use(cookieParser(secretStr))

server.use('/',function (req,res) {
    //给cookie加密
    req.secret=secretStr;//签名密钥,不能加密,但是防篡改
    res.cookie('user','xxxx',{signed:true});//signed需要签名
    // s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE
    console.log(req.cookies);//无签名的
    //可以用decodeURIComponent解析,可以看到,如果修改后可以知道
    // console.log(decodeURIComponent('s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE'));//s:xxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1/06gosSPXBE

    console.log(req.signedCookies)//所有签过名的

    res.send('ok')
})

删除cookie
res.clearCookie(名字)

session使用

cookie-session

//注意这里的代码是会报错的
const express = require('express')
const cookieParser = require('cookie-parser')
const cookieSession = require('cookie-session')

var server = express()
server.listen(8989)


//session
server.use(cookieParser())
server.use(cookieSession())
server.use('/',function (req,res) {
    console.log(req.session);

    res.send('ok')
})

报错如下
Error: .keys required.

//session
server.use(cookieParser())
server.use(cookieSession({
    keys:['aaa','vvv','desssss']
}))

server.use('/',function (req,res) {
    console.log(req.session);//{}

    res.send('ok')
})

改良后如下:

//session
server.use(cookieParser())
server.use(cookieSession({
    keys:['aaa','vvv','desssss']
}))

server.use('/',function (req,res) {
    if(req.session['count']==null){
        req.session['count']=1
    }else{
        req.session['count']++
    }
    console.log(req.session['count']);

    res.send('ok')
})

express:sess.sig每次刷新页面都会改变
express:sess每次刷新页面都会改变
在这里插入图片描述

//session
server.use(cookieParser())
server.use(cookieSession({
    name:'ssess',
    keys:['aaa','vvv','desssss'],
    maxAge:2*3600*1000,//长时间未操作,时间越短月安全,占用时间越长,服务的压力越大
}))
//...
})

keys可以优化为

var arr = [];
for(var i=0;10000000,i++){
	arr.push('sig_'+mMath.random());
}

//--------省略部分代码块
keys:arr

删除session
delete req.session

token


总结:

cookie—存在浏览器【客户端】,4K,不安全,可签名【防篡改】、可加密

const express = require('express')
const cookieParser = require('cookie-parser')

var server = express()
server.listen(8989)

//cookie
var secretStr='whhhhsnsmjsjsd'
//读取cookie
server.use(cookieParser(secretStr))

server.use('/',function (req,res) {
    //给cookie加密
    req.secret=secretStr;//签名密钥,不能加密,但是防篡改,*这句可不用*
    res.cookie('名字','值',{path:'/',maxAge:2,signed:true});//signed需要签名
    // s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE
    console.log(req.cookies);//无签名的
    //可以用decodeURIComponent解析,可以看到,如果修改后可以知道
    // console.log(decodeURIComponent('s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE'));//s:xxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1/06gosSPXBE

    console.log(req.signedCookies)//所有签过名的
//删除cookie
res.clearCookie('名字')
    res.send('ok')
})

session—存在服务器,安全,无限大,不能独立存在【基于cookie】

参考
详解cookie、session、token关于前后端的那些事(强烈推荐)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值