微信小程序Session问题_finQiQi的博客-CSDN博客_小程序session

微信小程序——session
今天做微信小程序的时候,遇到一个问题,就是微信虽然提供了类似于ajax的数据通讯工具wx.request,但是因为不是浏览器,因此这个请求是不会带有sessionid的,那么今天就写一篇来记录如果解决微信小程序session的问题。

sessionid有什么用
因为我只写java web多,所以就以java web为主。那么写过java web的都知道,request是一次请求,session是一个会话周期,但是后台是如何识别请求是属于哪个session的呢?这就要降到cookie和session的关系。

我们都知道,session是服务器维护的会话,cookie是客户端(浏览器)持有的保存一些数据的,那么session实际上是通过cookie识别的。(因此当用户浏览器禁用cookie,也就代表服务器端session也被禁用了,无法得知访问是属于哪个session,因此就不存在session了。但是也不代表完全无法得到)那么当浏览器第一次访问网站网站会在response的header中添加一个叫做Set-Cookie的字段,这个字段的含义就是让浏览器将这里面的每条数据都放到你的cookie里面,这对于用户开发者都是不可见的,浏览器会自动放入cookie,而每次请求都会带着set-cookie里面的数据在cookie里,因此服务端只需要看一下cookie里面的sessionid就知道是来源了。在jsp中是jessionid这个值。

针对wx.request添加header
那么知道了原理,我们就可以手动模仿浏览器自动添加cookie这一步,那么app.js里面有一个onShow/onLaunch,在这步里面,我们可以使用一个wx.request去访问我们的后台,那么后台的服务器这时候是可以拿到第一个sessionid的,那么服务端将这个sessionid回复给我们,我们就可以记录下这个header。
首先在我们的app.js全局数据中添加header

globalData: {
userInfo: null,
header: {
‘Cookie’: ”
}
}

这里面可以放我们的cookie,然后请求服务端返回当前会话的sessionid
客户端代码:

wx.request({
url: app.globalData.requestUrl,
data: {
code: res.code
},
success: function (res) {
let ret = res.data;
if (ret.status == 200) {
// 添加到全局数据的header中
app.globalData.header.Cookie = ‘JSESSIONID=’ + ret.data.sessionid;
}
}
})

服务端代码:
ret.put(“sessionid”, request.getSession().getId());
很简单就能直接获得我们的id,这样子,我们就完成了header的获取

那么每次我们的wx.request,就要带上这个header
代码:

wx.request({
url: app.globalData.requestUrl,
// header中添加我们预先放入全局数据中的header,完成session的手动添加,那么就完成了会话的设置
header: app.globalData.header,
method: ‘GET’,
dataType: ‘json’,
success: function(res){
console.log(res.data.data.url)
that.setData({
captcha: res.data.data
})
}
})

图片显示问题
因为有些时候可能需要验证码,而验证码是放到session中的,那么如果直接选择访问服务器返回的验证码地址,可能取出来的就是null了。

比如我们的服务器返回一个url,而这个url实际上是取session中的验证码来生成图片,那么可能就存在问题。

因此,这就是当浏览器禁用了cookie的时候,我们可以通过URL获得sessionid

对于java web来说,url;jessionid=就可以达到和设置header一样的效果,就能解决非request的session问题了

总结
两种办法:
1、针对wx.request,采用全局数据保存sessionid的方式,手动每次请求添加进请求体中
2、针对图片资源,采用url传session方式,将sessionid放入url,可以起到一样的效果
————————————————
版权声明:本文为CSDN博主「finQiQi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a610616898/article/details/79413368

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏