zoukankan      html  css  js  c++  java
  • 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"));

    解决了,美滋滋

  • 相关阅读:
    python实例26[查询修改文件的属性]
    [SCM]源码管理 VisualSVN Server+TortoiseSVN
    持续集成之“依赖管理”
    Spoon:在“云”上运行桌面应用程序
    数字签名的验证
    判断Linux/Unix为32位或64位
    持续集成理论和实践的新进展
    [SCM]源码管理 SVN Server
    [BuildRelease Management]Parabuild
    为VM增加磁盘空间
  • 原文地址:https://www.cnblogs.com/zhuyupingit/p/9454318.html
Copyright © 2011-2022 走看看