微信小程序保持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 相关文章推荐
推荐:极酷右键菜单
Nov 29 Javascript
js 日期转换成中文格式的函数
Jul 07 Javascript
Javascript Throttle & Debounce应用介绍
Mar 19 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
ionic2 tabs 图标自定义实例
Mar 08 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
Sep 28 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
Jan 24 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
JavaScript计算出两个数的差值
Mar 19 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数据浏览器
2007/03/11 PHP
php记录日志的实现代码
2011/08/08 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
React 组件间的通信示例
2018/06/14 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python常用模块用法分析
2014/09/08 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
python实现视频压缩功能
2020/12/18 Python
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
文员个人的求职信范文
2013/09/26 职场文书
农村婚礼主持词
2014/03/13 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
楚门的世界观后感
2015/06/03 职场文书