解决http无状态问题

// http无状态问题不解决,就永远不知网线那一头的人是男是女~

cookie + session

  • Session称为会话状态,是开发者为了实现中断和继续等操作的抽象概念。但在cookie+session中,session被看做是一种高级会话的实现。
  • cookie写在http的header中,解决了前端的无状态问题。但是由于前端的诸多限制(比如说浏览器删除cookie),导致了cookie的局限,所以使用session实现了后端的无状态问题。具体方法是在服务端保存的一个数据结构(不在内存),用来跟踪用户的状态。
  • 总结:
    cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现session的一种方式。session的执行依赖session id,而且session id存在cookie中。cookie和session共同作用实现了http无状态问题,cookie和session都用作维持Session。
const cookieParser = require('cookie-parser')
const session = require('express-session')
app.use(session({
	secret: 'fefdfwqubgfa',							
	cookie: { maxAge: 60*1000*60 }, 	// 设置过期时间
	resave: true, 			 			// 即使session未被修改也保存session
	saveUninitialized: false 			// 无论有没有session cookie,每次请求都设置session cookie
}))

jwt

  • 用户登录后服务器产生加密字符串token发给前端,前端进行保存(cookie、localstorage)。前端发起请求会携带token。服务端通过私钥验证合法性。
    jwt全称是json web token
    共分为三部分:header、payload、verify signature
    示例如下,字符串共分为三个部分:
  • code:
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    .eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
    .SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • decode:
    header:
    {
    “alg”: “HS256”,
    “typ”: “JWT”
    }
    payload:
    {
    “sub”: “1234567890”,
    “name”: “John Doe”,
    “iat”: 1516239022
    }
    verify signature:
    {
    包含私钥,将第一部分和第二部分加密后产生第三部分
    }
const jwt = require('jsonwebtoken')
const secret = 'sjdiadjsasdvb'
createToken(payload) {
	payload.ctime = Date.now()
	return jwt.sign(payload, secret)
}
checkToken(token) {
	return new Promise((resolve, reject) => {
		jwt.verify(token, secret, (err, data) => {
			if(err) reject('验证失败')
			else resolve(data)
		})
	})
}
module.exports = { createToken, checkToken }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值