微信开发:Cookie在前端写还是后端?
2018-03-09 13:36
971 查看
做微信开发,要分辨用户,不可避免地就要涉及到cookie操作,那么cookie到底是在前端写还是在后端写,各有什么优势和缺点呢?今天咱们就来讨论一下,以完整的微信授权过程为例。
1. 前端写cookie
前端写cookie对前端理解整个项目的逻辑来说有很大的帮助,也更符合惯性思维,我想要获取用户的信息,那么就把用户的id提供给你。
优势:前端逻辑清晰,容易理解
缺点:不安全,cookie可能被篡改
2. 后端写cookie
后端写cookie对前端来说就是个黑盒子,我只要向后端发送申请,就可以拿到当前用户的信息,尽管我不知道用户的id。操作简单,理解起来不太友好。
优势:操作简单,安全性高
缺点:好像没啥缺点
3. 两边都写cookie
这应该就是2B程序猿的典型做法了。很不凑巧,刚做的一个项目就是这个干的,还因此引出了很多bug,挂出这种写法的流程图,梳理一下bug产生的原因。
从图中可以看到,这种实现方法实际上是存在问题的。前后端同时写了cookie,前端的cookie有效期是在设置cookie时设定的,后端cookie的有效期是通过session来限定的。如果两个有效期是相同的,那么可能看不到什么问题。但如果两次写cookie的有效期是不相同的,而且前端过期的时间晚于后端过期的时间,那么就会出现一个bug:
前端以为cookie仍有效所以不经过微信授权直接向后端获取数据,而后端session已经失效无法读到cookie中相应的uid,就会导致获取用户信息失败。
问题产生的根源在于,前端所写的cookie并不是用来获取用户信息使用的,而是为了人为地设定一个用户不需重复认证的时间段(可能是一周,或者十天,或者一个月),而后端的cookie是为了获取用户信息而写的。两者的目的不同,再加上沟通问题,导致了bug的产生。
综上所述,建议在后端进行写cookie操作,并通过session(面向连接)来控制cookie的过期时间。
1. 前端写cookie
前端写cookie对前端理解整个项目的逻辑来说有很大的帮助,也更符合惯性思维,我想要获取用户的信息,那么就把用户的id提供给你。
优势:前端逻辑清晰,容易理解
缺点:不安全,cookie可能被篡改
2. 后端写cookie
后端写cookie对前端来说就是个黑盒子,我只要向后端发送申请,就可以拿到当前用户的信息,尽管我不知道用户的id。操作简单,理解起来不太友好。
优势:操作简单,安全性高
缺点:好像没啥缺点
3. 两边都写cookie
这应该就是2B程序猿的典型做法了。很不凑巧,刚做的一个项目就是这个干的,还因此引出了很多bug,挂出这种写法的流程图,梳理一下bug产生的原因。
从图中可以看到,这种实现方法实际上是存在问题的。前后端同时写了cookie,前端的cookie有效期是在设置cookie时设定的,后端cookie的有效期是通过session来限定的。如果两个有效期是相同的,那么可能看不到什么问题。但如果两次写cookie的有效期是不相同的,而且前端过期的时间晚于后端过期的时间,那么就会出现一个bug:
前端以为cookie仍有效所以不经过微信授权直接向后端获取数据,而后端session已经失效无法读到cookie中相应的uid,就会导致获取用户信息失败。
问题产生的根源在于,前端所写的cookie并不是用来获取用户信息使用的,而是为了人为地设定一个用户不需重复认证的时间段(可能是一周,或者十天,或者一个月),而后端的cookie是为了获取用户信息而写的。两者的目的不同,再加上沟通问题,导致了bug的产生。
综上所述,建议在后端进行写cookie操作,并通过session(面向连接)来控制cookie的过期时间。
相关文章推荐
- 航延险项目 java web开发是前端验证好还是后端验证好?
- 使用野狗做后端,开发微信小程序不需要后端工程师,前端自己就可以搞定了
- Web开发之二:什么是前端、什么是后端
- 微信群发图文消息前端页面,公众号开发图文消息页面
- 前端开发,你知道cookie的弊端吗
- 微信内移动前端开发抓包调试工具fiddler使用教程
- localStorage解决cookie关于前端存值微信ios拦截问题
- ssr.js无需等待,让前端独立于后端进行开发
- [置顶] java后端 三方登录之微信登录 开发详细流程以及遇到过的坑 总结(非常详细) 2017-12-26
- 微信小程序前端界面和后端服务器(PHP)的对接
- 4.前端基于react,后端基于.net core2.0的开发之路(4) 前端打包,编译,路由,模型,服务
- Web开发之前端和后端的区分
- openresty 前端开发进阶二之https后端
- 前端工程师们需懂的微信小程序开发规则
- Vue proxyTable 开发环境下前端和后端真实数据对接问题和解决跨域
- IE浏览器10 和11 前端没有传递cookie信息给后端的原因
- 开发攻略 | 微信小程序中使用后端云服务LeanCloud
- 使用微信小程序开发前端【快速入门】
- 学习笔记之开发相关概念(1)--前端后端前台后台