1,问题:
最近在做一个微信小程序,有一个功能:注册的时候:java后台生成六位随机数作为验证码,通过手机或者邮箱发送个客户(这个看客户界面选择通过什么方式注册),并把这六位随机数存到session里面
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.put("verifiCode",andNum);;
客户收到验证码,前端带着验证码发送请求;这时候后台接受到前端传过来的验证码,同之前存在session进行对比,依次来校验;这是取出session,如下
String seVerifiCode = (String) ActionContext.getContext().getSession().get("verifiCode");
但是后来打印出来的seVerifiCode的值是为null;
之前都是用这种方式验证的,可以获取到session里面的值。
后来发现是小程序通过wx.request发送的请求,都是产生的session一个新的值,这样跟后台的就不是同一个session啦。
2. 解决办法:
在java后台产生随机数的时候,获取到session并返回给前端,这样前端每次请求的时候就带这个session;如下
java获取session返回给前端:
String session_id = ServletActionContext.getRequest().getSession().getId();
dataMap.put("session_id",session_id);
rv.setData(dataMap);
前端小程序接受到这个session,设置到header里面:
if (result.CODE == '8888') {
getApp().globalData.header.Cookie = 'JSESSIONID =' + result.data.session_id;
同时前端需要在app.js设置全局的header参数:
globalData: {
header: { 'Cookie': '', 'content-type': 'application/x-www-form-urlencoded'}
},
下次做校验的时候就带着这个有java后台返回的session的头部去请求的,不会发生session不一致的
var header = getApp().globalData.header;
wx.request({
url: 'http://127.0.0.1:8080/utopia/checkVerifiCode.action',
data: {
verifiCode: verifCode
},
header: header,
method: 'POST',
success: function (res) {
}