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"));
解决了,美滋滋