cookie是浏览器在电脑硬盘中开辟的一块空间。cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除。cookie中的数据会随着请求被自动发送到服务器端。session实际上就是一个对象,存储在服务端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid作为唯一标识。
会在客户端与服务端间来回传递也是cookie区别与sessionStorage和localStorage的一大特点。sessionStorage是会话期间的存储机制,仅在当前浏览器窗口关闭前有效,无法持久保持。localStorage是持久性存储机制,它始终有效,窗口或浏览器关闭也一直保存。cookie只在设置的cookie过期时间之前一直有效。
session的缺点:
1、需要保证是同一台服务器,不能更换服务器(通俗的解释就是一人一半密码,一半在服务器,一半在cookie中,如果能对上,就代表登录过。那么就显然要保证是请求同一台服务器,因为你请求另一台服务器,另一台服务器中显然没有另一半密码,无法配对)。
2、要保证cookie可以设置,但跨域以后cookie不能设置,所以需要解决跨域问题
3、容易被伪造
token很好的的解决了session的这些缺点。token是在服务端产生的,如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回token给前端。前端可以在每次请求的时候带上token证明自己的合法地位。token完全由应用管理,因此它可以避开同源策略。token可以在多个服务器间共享。
token验证登录:
三段式加密字符串:aaaaaaaaaaaaaaaaaaa.bbbbbbbbbbbbbbbbbbbbbbb.ccccccccc:
第一段:头,签证:安全信息验证,进行不可逆加密
第二段:你要保存的信息:base64加密后截取内容
第三段:额外信息:不可逆加密
这一段字符串由后端发给前端。在登录过以后,生成一个token给到前端,前端保存这个token,如果前端需要登录后查看的页面,或者登录后发送的请求,只要把token带回来,服务端解密。如果能正常解密并且没有过期,就表示正常登录过。如果解密完过期了,就代表已经过期了。如果解密不出来,就代表token是伪造的。
比如一个购物车页面:
前端发送请求请求用户的购物车数据,要求登录后查看,把token放在请求头里面带过去。服务端接收请求,查看请求头里面有没有token,如果没有,则拒绝请求。如果有token就对其进行解析,如果过期了或者无效则拒绝请求。如果解密token没有问题,那么继续向后进入路由,准备购物车的数据并返回。