微信小程序保持session会话的方法


Posted in Javascript onMarch 20, 2020

        一般我们web网站都会有cookie来保存session ID,将用户和服务器保持在一次会话中,但是很遗憾,微信小程序不支持cookie,他的每一次请求就是一次会话,这样就会产生一个问题,每次请求都需要确定当前的用户是谁,但是我们又不能在每次请求的数据中携带用户的信息,这样是不安全的。今天就介绍两种方式来实现保持会话。

第一种:客户端保存session ID

        1、通过wx.login接口获取 code,将code传递到后台(一般后台都有shiro或者Spring security这种过滤器,该方法作为第一个启动方法需要后台放过),后台通过code访问微信接口,返回当前登陆的微信信息。

微信小程序保持session会话的方法

2、后台通过微信的openID去数据库的微信信息表中查询该微信号是否与后台用户绑定过,如果绑定过,将该用户信息放入session中,并返回已绑定标记,为绑定过,返回为绑定标记。并且将会话ID返回。

微信小程序保持session会话的方法

微信小程序保持session会话的方法

3、小程序拿到sessionID和是否绑定标记,将session ID存入缓存中或者在app.js中定一个全局变量用来存储。如果未绑定,跳转到绑定页面,如果绑定,去往首页。

4、因为后台的session都有过期时间,默认是半个小时,所以说为了确保小程序端的session ID不会过期,我们需要在他过期之前刷新sessionID。

微信小程序保持session会话的方法

我们每过二十分钟刷新一次,也就是重新请求一次。

将该函数放到app.js的生命周期函数中,这样一旦打开小程序就会执行

微信小程序保持session会话的方法

5、每次请求需要将sessionID放入cookie中,并将它设置头request header中

微信小程序保持session会话的方法

第二种:小程序保持唯一标识uuid(如果后台过滤器需要登陆验证的话,小程序端的请求接口都需要放行),这个就不贴代码了,基本和上面逻辑差不多,只不过这次存的是uuid。

1、小程序请求微信,拿到code,请求后台并传递code
2、后台根据code请求微信,拿到openID
3、后台根据openID去微信信息表查询该openID是否绑定用户,绑定了,返回一个唯一表示uuid以及绑定标识,没有绑定,创建一个uuid以及未绑定标识返回给小程序
4、小程序判断未绑定,跳转到绑定页面,根据输入信息+uuid返回给后台绑定用户,后台返回是否绑定成功
5、根据绑定是否成功,小程序操作

小程序只保存uuid(相当于accesstoken),这个uuid是小程序与后台连接的桥。

注意:这两种方法都是不安全的,试想一下如果sessionID被劫持到了,并且还处于当前会话中,黑客完全可以通过该session ID恶意获取后台数据(类似CSRF攻击)。uuid的话,因为这种请求被后台过滤器放过,所以完全可以直接请求后台数据了。

到此这篇关于微信小程序保持session会话的方法的文章就介绍到这了,更多相关小程序保持session会话内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js类后台管理菜单类-MenuSwitch
Sep 12 Javascript
javascript FormatNumber函数实现方法
Dec 30 Javascript
JQUERY 浏览器判断实现函数
Aug 20 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
鼠标滚轴控制文本框值的JS代码
Nov 19 Javascript
javascript中for/in循环及使用技巧
Sep 01 Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
Vue脚手架编写试卷页面功能
Mar 17 Javascript
原生JS实现弹幕效果的简单操作指南
Nov 10 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
微信小程序后端无法保持session的原因及解决办法问题
Mar 20 #Javascript
js 闭包深入理解与实例分析
Mar 19 #Javascript
JS一次前端面试经历记录
Mar 19 #Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 #jQuery
浅析TypeScript 命名空间
Mar 19 #Javascript
JavaScript计算出两个数的差值
Mar 19 #Javascript
JavaScript利用键盘码控制div移动
Mar 19 #Javascript
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
php实现简单四则运算器
2020/11/29 PHP
js word表格动态添加代码
2010/06/07 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python中while循环语句用法简单实例
2015/05/07 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
python db类用法说明
2020/07/07 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
副总经理岗位职责
2014/03/16 职场文书
招标承诺书
2014/08/30 职场文书
学校食堂标语
2014/10/06 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
小平小道观后感
2015/06/09 职场文书
教师节班会主持词
2015/07/06 职场文书
Python合并pdf文件的工具
2021/07/01 Python