单机和分布式应用下登陆校验,session共享,分布式缓存使用讲解
1、单机tomcat应用登录检验
sesssion保存在浏览器和应用服务器会话之间
用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,
客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId
2、分布式应用中session共享
真实的应用不可能单节点部署,所以就有个多节点登录session共享的问题需要解决
1)tomcat支持session共享,但是有广播风暴;用户量大的时候,占用资源就严重,不推荐
2)使用redis存储token:
服务端使用UUID生成随机64位或者128位token,放入redis中,然后返回给客户端并存储在cookie中
用户每次访问都携带此token,服务端去redis中校验是否有此用户即可
3)但使用redis存储如果你并发量很高,一种io的传输也是消耗流量传输的,但现在也有很多公司在使用,因为比较便捷,第三种方式就是使用JWT,通过用户登陆加密生成密钥token返回给浏览器存储,每次用户发请求过来将密钥进行解密算法,如果能解密成功说明登陆过了,如果解密失败,可能是生成的密钥过期了,或者是伪造的,就需要重新登陆。这样就避免了流量的传输也不占内存
JWT
JWT是一个开放标准,它定义了一种用于简介,自包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。JWT可以使用HMAC算法或者是RSA的公钥密钥对进行签名
简单来说,就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息
{
id:888,
name:'xxx',
//过期时间
expire:10000
}
funtion 加密(object, appsecret){
xxxx
return base64( token);
}