小程序发送请求,java后台struts2的action里面接收不到session储存的值

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) {

}

 

你可能感兴趣的:(web前端)