微信小程序保持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 相关文章推荐
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
Sep 06 Javascript
jQuery中next()方法用法实例
Jan 07 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
javascript函数的节流[throttle]与防抖[debounce]
Nov 15 Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
Element UI框架中巧用树选择器的实现
Dec 12 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
微信小程序后端无法保持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
php设计模式 Template (模板模式)
2011/06/26 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python查询IP地址归属完整代码
2017/06/21 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
jupyter 导入csv文件方式
2020/04/21 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
python线性插值解析
2020/07/05 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
十佳护士获奖感言
2014/02/18 职场文书
房地产开发项目建议书
2014/05/16 职场文书
生活部的活动方案
2014/08/19 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技