微信小程序保持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 相关文章推荐
datagrid框架的删除添加与修改
Apr 08 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
JS设置随机出现2个数字的实例代码
Jul 19 Javascript
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
Jan 19 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
Python读取网页内容的方法
2015/07/30 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
python生成器与迭代器详解
2019/01/01 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
办理信用卡工作证明
2014/01/11 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
升国旗演讲稿
2014/09/05 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python