微信小程序保持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 相关文章推荐
jQuery+Ajax实现无刷新操作
Jan 04 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
js倒计时显示实例
Dec 11 Javascript
JS正则表达式验证中文字符
May 08 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
解决Vue不能检测数组或对象变动的问题
Feb 24 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
Aug 16 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 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+MySQL 制作简单的留言本
2009/11/02 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python如何爬取动态网站
2020/09/09 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
村捐赠仪式答谢词
2014/01/21 职场文书
安全标准化汇报材料
2014/02/03 职场文书
倡议书范文大全
2015/04/28 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
深入理解python多线程编程
2021/04/18 Python