Java中session保存和获取验证码获取的id不一致问题

前几个月由于自己学习JAVAEE的一部分内容,于是最近准备自己写个小项目,于是碰见了一些问题对于一个JAva菜鸟来说,我需要保存下来

什么问题类,就是我在注册中加入验证码而且是中文,四字成语验证码,

首先用Java生成验证码和验证码图片,调用验证码接口,把验证码使用session保存在客户端,并且发送图片到前端展示,

然后点击注册,前端传递用户输入的验证码到后台,后台获取用户输入的验证码和用session获取保存在客户端的验证码对比,正确与否

可是!!!!!!!!!!!!!!!!!!!!!!!可是,可是,可是

// 保存session代码

request.getSession().setAttribute("code_session", word);

// 获取session代码

String userCode_session = (String)request.getSession().getAttribute("code_session");

我保存了,获取的时候获取的是空,代码没毛病,对于我Java菜鸟来说得要找后台同事帮我,不过人家也郁闷,人家一般用的框架,底层淡忘了,不过说代码没毛病啊

同事建议我用cookie保存,可是cookie应该不安全吧,前端JS是可以获取到的,不过我换是准备试试,先把功能完成

结果!!!!!!!!!!!!!!!!!!!!!!!页面报500

原来cookie不支持中文保存,我记得前端貌似可以保存中文,后台居然不行,

算了,我用session保存

然后我们打印session的ID来看

// 打印session的ID代码

request.getSession().getId()

发现两次ID不是一个ID,保存的session的ID一直没变,可是获取的一直在变

花费三四个小时,我两找到了问题原因,原来人家说是存在跨域问题

于是解决方案

1.前端ajax中加入跨域

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    dataType:'json',
    success: callback,
    error:function(e){
      console.log(e)
    },
    xhrFields: {
      withCredentials: true
    }
  });

2.后台代码(本接口中加入)

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

解决了,美滋滋

 

posted @ 2018-08-10 12:17  风的味道真好闻  阅读(5869)  评论(0编辑  收藏  举报