我在项目中制作登录的时候,利用的是后台生成token并将token缓存在后台同时给前端,前端保存token在cookie中,当与后台api交互的时候,在请求中携带token,后端利用token与缓存的token做对比,判断请求是否有效。
这样做存在什么弊端吗?为什么我看网上都在提登录时要使用session.
我在项目中制作登录的时候,利用的是后台生成token并将token缓存在后台同时给前端,前端保存token在cookie中,当与后台api交互的时候,在请求中携带token,后端利用token与缓存的token做对比,判断请求是否有效。
这样做存在什么弊端吗?为什么我看网上都在提登录时要使用session.
用cookie没有弊端吧,但使用session会导致应用有状态,有状态的应用扩展需要将状态的数据独立,使用token可以实现无状态,但无状态token,例如jwt确是有弊端的,比如无法主动让一个token失效,但服务扩展是非常方便的。各有优缺点,个人觉得如果应用的业务足够复杂,无状态是不能满足要求的,还是得用到会话跟踪技术(session)
session 的储存位置是你的服务器,一般有效期是会话周期。session的主要根据保存在客户端的cookie中的session_Id判断,适合储存敏感信息。
cookie的储存位置是客户端,对用户是可见的,可以用户保存用户登录的凭证,但是建议设置成服务器只读 HttpOnly,禁止js操作cookie。(关于 HttpOnly 谷歌一下)
一般的实行自动登录是使用cookie,在登录后保存一个临时的机密信息使用session(因为session保存在服务器端)。
同时服务器端也应该做出防范措施,包括生存Token的随机性,完整性、不泄露用户信息、远程销毁等。
唯一的问题是cookie会增加网络流量,宏观表现是当cookie体积变大后,网络请求会变慢。
13 回答13.1k 阅读
7 回答2.2k 阅读
4 回答1.7k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
大同小异吧,使用 session 也要将登录信息放到 cookie 中,通过 cookie 传给后台;不同的是,使用 session 会将登录信息存储在文件中,而你存在缓存中例如 redis 是在内存中。