首页
更多应用
Search
1
修改iview的标签为i-的形式而不是驼峰的形式
2,791 阅读
2
PHP微信和企业微信签名
2,522 阅读
3
在VUE中怎么全局引入sass文件
2,223 阅读
4
vscode硬件占用较高解决方案
2,017 阅读
5
解决Macos下storm系列IDE卡顿的问题
1,975 阅读
默认分类
JS
VUE
CSS
mac使用技巧
React
fastmock
登录
/
注册
Search
标签搜索
react
js
vue
vscode
nodejs
项目
代码
webpack
工具
nginx
小程序
css
fastmock
eslint
npm
http
vue-cli3
git
浏览器
const
fastmock技术社区
累计撰写
102
篇文章
累计收到
26
条评论
首页
栏目
默认分类
JS
VUE
CSS
mac使用技巧
React
fastmock
页面
更多应用
搜索到
4
篇与
的结果
2021-01-06
微信小程序后端无法保持session的原因及解决办法问题
最近在开发一个小程序遇到一个问题,后端接口的登录验证通过postman调试是可以成功的,后端采用了session机制验证token信息,因为postman可以调试通过,那么可以排除是后端没开启session的问题,最后发现,原来浏览器会自动维护cookie,而小程序的wx.request不会。这涉及到session与cookie的关系及保存机制的问题。首先,cookie是保存在客户端的信息,而session是保存在服务器的信息。那服务器如何识别单独用户的session,在一次连接下,如何判别该用户是属于哪一个session。机制是,服务器生成一个sessionid辨别用户,并在相应中的cookie带上该sessionid值。在用户下一次请求时,请求头中cookie理应也带上该sessionid,以便服务器辨别用户会话。其中辨别机制和session存储机制涉及到序列和反序列化,在session.save_path中,为每一个session单独创建一个文件,文件名为sessionid,内容则是此次会话保存的session。而wx.request并不会在请求中带上cookie,所以导致每次请求都被服务器分配一个新的sessionid,造成会话不能保持的后果。解决办法应在wx.request中带上该sessionid,或者重新封装wx.request。我采用了在请求头中的Cookie字段带上sessionid的方式自己维护一个header,在wx.request中保存和发送Cookie。首先在app.js中存储一个全局变量,存放header。globalData: { header: { "content-type": "application/x-www-form-urlencoded", 'Cookie': '' } }然后在每一次wx.request中的请求参数中带上该header。在每一次响应中检测并保存Cookie到header。wx.login({ success: (res) => { getToken({ data: { code: res.code, Cookie: getApp().globalData.cookie }, success: (res) => { console.log(res); // 注:此处的resHeader是在请求方法中封装好返回的返回体中的ResponseHeader if (res.resHeader["Set-Cookie"] != null) { //设置cookie This.globalData.Cookie += res.resHeader["Set-Cookie"] } const token = res.data.token; console.log('getToken success', res); This.globalData.token = token; wx.setStorage({ key: 'token', data: token}) }, }) } })其他请求的请求头中带上Cookie信息 header: { token: res.data, Cookie: getApp().globalData.Cookie },测试第一次请求接口-登录接口RequestHeader: Accept: */* Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive content-type: application/json Cookie: Host: marvengong.natapp1.cc Referer: https://servicewechat.com/wx66bf3980d8d1660f/devtools/page-frame.html token: D3F3CD0A-FB1C-6B30-8C5B-41A8AAA2A799 User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.03.2011120 MicroMessenger/7.0.4 Language/zh_CN webview/ 第一次请求的响应ResponseHeaderCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 Date: Wed, 06 Jan 2021 14:22:52 GMT Expires: Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive: timeout=5, max=100 Pragma: no-cache Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02 Set-Cookie: PHPSESSID=t3fk6bpkrj2njiejsp0qva9fv1; path=/ Transfer-Encoding: chunked X-Powered-By: PHP/5.6.9第二次请求--提交用户信息接口RequestHeaderAccept: */* Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Content-Length: 842 content-type: application/json Cookie: PHPSESSID=t3fk6bpkrj2njiejsp0qva9fv1; path=/ Host: marvengong.natapp1.cc Origin: http://127.0.0.1:23460 Referer: https://servicewechat.com/wx66bf3980d8d1660f/devtools/page-frame.html token: 88845DB7-DDA4-D515-1BC0-EE812B5142D9 User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.03.2011120 MicroMessenger/7.0.4 Language/zh_CN webview/可以看到第二次请求带上了Cookie信息,其中的重要信息就是PHPSESSID,这是客户端和服务端会话的票据以上方法基本能解决微信小程序Cookie问题。
2021年01月06日
304 阅读
0 评论
0 点赞
2020-07-22
微信公众平台、微信公众平台.小程序、微信.开放平台三者关系及unionid
一、微信公众平台、微信公众平台.小程序、微信.开放平台登录地址 项目 微信公众平台 微信公众平台.小程序 微信。开放平台 登录地址 https://mp.weixin.qq.com https://mp.weixin.qq.com https://open.weixin.qq.com 登录账号 xxx@**** xxx**** xxx**** 简称 公众号平台 小程序平台 开放平台 这三个平台必须使用不同的账号申请,因为账号是邮箱地址,所以,必须使用3个不同的邮箱地址作为账号,如果某个邮箱地址已经是微信公众平台的账号,则这个邮箱地址就不能用于另外的两个平台。事实上,微信公众平台为了和微信公众平台.小程序区分开来,也可以称作微信公众平台.公众号。以下简称:公众号平台、小程序平台、开放平台。二、三者之间的关系如果需要搞清楚三者之间的关系,就涉及到unionid。关于unionid,在【微信官方文档.公众号】是这样描述的:开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。综上:1、公众号平台负责管理公众号;2、小程序平台负责管理小程序;3、每个平台对于某个用户都会产生一个OpenID,在单独的平台上这个OpenID是唯一的,但是如果某个用户既要使用公众号,又有小程序,那么在公众号和小程序平台上OpenID是分别不一样的。4、此时就需要开放平台,凡是在开放平台登记的应用,对于这个开放平台都将使用一个统一的unionID。这样就可以在不同的平台上唯一确定某个用户了。这么理解,公众号平台和小程序平台是相互独立的平台,可以各自开发各自的应用,如果是一个独立的应用,那么只需要使用OpenID就可以区别用户,例如如果只是使用公众号,不使用小程序,那么直接使用公众号的OpenID就可以了,繁殖对于小程序来说也是一样的。同一个用户在公众号平台和在小程序平台上的OpenID是不一样的,但是实际应用是经常会需要公众号和小程序同时使用,这样就需要使用开放平台来统一OpenID,最终出现了unionid。这个是唯一的,不变的!三、小程序开发中关于使用Session_Key可以解开得到unionid问题按照官方文档的说明,前端是可以通过 wx.login 获取到 code 登录凭证,然后在后台通过 auth.code2Session 换取openid,session_key,unionid,需要说明的是,unionid是用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回。那么满足什么样的条件会直接返回unionid呢?答案是注册认证微信开放平台,注意一定要认证,也就是说要交300元通过认证,这样后台就会直接返回unionid。否则,按照官方说的如果没有返回unionid,也可以通过session_key在后台进行解密,解密需要的相关参数需要前端通过wx.getUserInfo调用获取到userInfo,rawData,signature,encryptedData,iv,cloudID参数。后台通过加密算法解密,最终可以得到unionid。 我测试的时候,如果没有通过开放平台认证,密文数据中始终没有返回unionid,不知道不认证的情况下满足什么样的条件才会返回。————————————————版权声明:本文为CSDN博主「sensor_WU」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/sensor_WU/java/article/details/103976716
2020年07月22日
519 阅读
0 评论
0 点赞
2019-03-03
小程序wxs中的时间格式化以及格式化时间和date时间互转
WXS(WeiXin Script)是小程序的一套脚本语言,wxs 与 javascript 是不同的语言,有自己的语法,并不和 javascript 一致。其中包括了很多日常使用的javascript函数,在wxs中都是不能同样使用的。最近在做一个列表的时候,涉及到时间格式化操作。就遇到了这个问题,以前写好了的格式化工具函数直接拷贝到小程序项目的wxs文件中,函数不能正常执行。其中包括了下面的几个错误正则表达式在字符串的replace函数中的使用方法不一样,不能直接使用var a = /[0-9]/这种方式声明使用。正确的方式为var reg = getRegExp("-", "g");获取当前时间不能通过new Date()获取,而是通过getDate方法获取。getDate('2018/12/12')可以获取对应日期的date类型的时间。按照上面的异同,修改过后的时间格式化函数代码为var formatNumber = function (n) { n = n.toString() return n[1] ? n : '0' + n } var regYear = getRegExp("(y+)", "i"); var dateFormat = function (timestamp, format) { if (!format) { format = "yyyy-MM-dd hh:mm:ss"; } timestamp = parseInt(timestamp); // 通过getDate()方法获取date类型的时间 var realDate = getDate(timestamp); function timeFormat(num) { return num < 10 ? '0' + num : num; } var date = [ ["M+", timeFormat(realDate.getMonth() + 1)], ["d+", timeFormat(realDate.getDate())], ["h+", timeFormat(realDate.getHours())], ["m+", timeFormat(realDate.getMinutes())], ["s+", timeFormat(realDate.getSeconds())], ["q+", Math.floor((realDate.getMonth() + 3) / 3)], ["S+", realDate.getMilliseconds()], ]; var reg1 = regYear.exec(format); // console.log(reg1[0]); if (reg1) { format = format.replace(reg1[1], (realDate.getFullYear() + '').substring(4 - reg1[1].length)); } for (var i = 0; i < date.length; i++) { var k = date[i][0]; var v = date[i][1]; // getRegExp初始化一个正则表达式对象 var reg2 = getRegExp("(" + k + ")").exec(format); if (reg2) { format = format.replace(reg2[1], reg2[1].length == 1 ? v : ("00" + v).substring(("" + v).length)); } } return format; }把格式化的日期时间字符串转换成时间戳function parse(fmt) { fmt1 = fmt.substring(0, 19); var reg = getRegExp("-", "g"); fmt2 = fmt1.replace(reg, '/'); var timestamp = getDate(fmt2).getTime(); return timestamp; }调用方法如下function getDateByDateTimeFmt(dateTimeFmt) { return dateFormat(parse(dateTimeFmt), 'MM月dd日'); } getDateByDateTimeFmt('2012-12-12 13:12:12') // => 12月12日
2019年03月03日
760 阅读
0 评论
0 点赞
2018-10-30
小程序中生成二维码和条形码
使用wxbarcode模块可以很方便地生成二维码和条形码。效果安装$ npm install wxbarcode使用方法import wxbarcode from 'wxbarcode' wxbarcode.barcode('barcode', '1234567890123456789', 680, 200); wxbarcode.qrcode('qrcode', '1234567890123456789', 420, 420);条形码函数名:barcode函数原型:barcode(id, code, width, height)参数:id: wxml文件中的 Canvas IDcode: 用于生成条形码的字符串width: 生成的条形码宽度,单位 rpxheight: 生成的条形码高度,单位 rpx二维码函数名:qrcode函数原型:qrcode(id, code, width, height)参数:id: wxml文件中的 Canvas IDcode: 用于生成二维码的字符串width: 生成的二维码宽度,单位 rpxheight: 生成的二维码高度,单位 rpx小程序案例// 页面所在的js文件 import wxbarcode from '../../utils/qrcode/index.js'; // ... wxbarcode.barcode('barcode', res.data.voucher_info.closure_code, 680, 150); wxbarcode.qrcode('qrcode', res.data.voucher_info.closure_code, 340, 340);// wxml文件 <view class='barcode'> <canvas canvas-id="barcode"></canvas> </view> <view class='qrcode'> <!-- <image src='/assets/images/qrcode.png'></image> --> <canvas canvas-id="qrcode"></canvas> </view>本地wxbarcode目录结构(从github download下来的目录结构)
2018年10月30日
1,376 阅读
0 评论
0 点赞