知识小结
post 和 put 方法的总结
put: 使用 put 发送多次请求,返回相同的内容,put 方法支持幂等性
post: 使用 post 发送两次次请求,请求被处理两次,生成两个对象,使用 token 标记的方法来处理相同的 post 请求
web会话管理
1. session 会话机制
用户第一次访问应用时, server 端把 session 对象创建完成之后,通过 cookie 将 session 传给客户端,每一个用户对应一个 sessionId。第二次访问时,客户端通过 cookie 将 sessionId 携带给 server 端,服务器根据 sessionId 找到该用户对应的 session 对象只有在用户登录认证成功之后,并且往sesssion对象里面放入了用户登录成功的凭证,只要拿到用户的session对象,看它里面有没有登录成功的凭证,就能判断这个用户是否已经登录。当用户主动退出的时候,会把它的session对象里的登录凭证清掉。对于 session 而言,每次请求都会延长失效时间。
2. cookie 会话机制
Cookie是不允许垮域访问的。用户登录时,server 端生成登录凭证(加密),登录成功后,用户将登录凭证保存在户cookie,设置 cookie 的过期时间,用户进行后续请求时,携带 cookie(解密),若过期,重新登录。
3. token 会话机制
用户登录时,server 端生成加密的token,登录成功后,这个token在返回给客户端之后,后续请求都必须通过url参数或者是http header的形式,主动带上token,这样服务端接收到请求之后就能直接从http header或者url里面取到token进行验证。
Token的优点
Token作为用户认证的处理方式,有几个优点:
无状态,可扩展:不会在服务端存储用户的登录状态,可以很容易的实现服务器的增减
支持移动设备,对多类型客户端的支持良好
支持跨程序调用,各个接口之间的调用更方便
安全可靠
jsonwebtoken是用来生成token给客户端的,express-jwt是用来验证token的。
使用 jsonwebtoken 生成 token 时,代码如下:
let token = jwt.sign({
_id: _id,
}, "secret",{
expiresIn : 60*60*24// 授权时效1天
})
使用 express-jwt 验证 token 时,代码如下:
app.use((err, req, res, next) => { // 校验 token
if (err.name === "UnauthorizedError") {
res.status(401).send({
stat: 0,
msg: "invalid token"
});
} else {
next()
}
})
补充:
- webpack 配置别名
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'~common': resolve('common')
}
},
- 以为跨越导致 cookie 丢失,设置 withCredentials:true 之后,依然在客户端获取不到 cookie ,后来发现设置了 httpOnly, 导致 document.cookie 无法读取 cookie中的内容