1.随手小记(token cookie session之间的关系)
2021-4-26
1.cookie
1.Cookie的与session
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
2.session
(1)当浏览器第一次发送请求到服务端时,服务端同时会创建一个session,并将sessionid返回给浏览器,储存起来
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
浏览器访问过程(重点):
当用户第一次通过浏览器使用用户名和密码访问服务器时,服务器会验证用户数据,验证成功后在服务器端写入session数据,向客户端浏览器返回sessionid,浏览器将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从数据库获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持。
3.token
(1)当使用cookie与session时当用户量增加会导致服务器压力增大!且当别人获取到sessionid时可以拿到属于你的用户数据,很不安全!
(2)当你第一次访问时服务器会生成一个加密token返回给客户端,(重点:服务器不保存,减轻了服务器的压力)
(3)浏览器会将接收到的token值存储在Local Storage中,(通过js代码写入Local Storage,通过js获取,并不会像cookie一样自动携带)
(4)当你访问时会将token带给服务器进行解密,然后查询属于你的个人信息!
4.我不理解的地方
token是能够减小服务器的压力,但是好像安全性并没有提升,你发送给我加密的token,我像获取cookie一样获取到别人加密的token,然后发给服务器不是照样能拿到属于别人信息?安全性并没有啥提高呀
貌似token是这样的
对数据做一个签名吧, 比如说我用HMAC-SHA256 算法,加上一个只有我才知道的密钥, 对数据做一个签名, 把这个签名和数据一起作为token , 由于密钥别人不知道, 就无法伪造token了。但是这样的话服务器也不知道我的密钥呀,它咋进行判断是否相同?好烦,希望看到了的人可以解答一下