在spring中为何两次请求的session不是同一个session

这是第一次的请求,把random存储在session中

@RequestMapping(value = "/val.do", method = {RequestMethod.POST})
    @ResponseBody
    public String val(@RequestBody Map<String,String> phone,HttpServletRequest req) {
        int randNum = 1 + (int)(Math.random() * ((999999 - 1) + 1));
        HttpSession session = req.getSession();
        if(session.getAttribute("val")==null) {
            session.setAttribute("val", randNum);
            session.setMaxInactiveInterval(1200);
        }
}

这是第二次的请求,为何第二次请求中session.getAttribute("val")为null,明明在第一次已经写近session了
@RequestMapping(value = "/regester.do", method = {RequestMethod.POST})

@ResponseBody
public String reg(@RequestParam("val") String val,
                  HttpServletResponse response,
                  HttpServletRequest req) {
            HttpSession session = req.getSession();
            System.out.println(val);
            System.out.println(session.getId());
            if(val!=session.getAttribute("val")){
                return "false";
            }
  }
阅读 12.3k
7 个回答
@ResponseBody
public String reg(@RequestParam("val") String val,
                  HttpServletResponse response,
                  HttpServletRequest req) {
            HttpSession session = req.getSession();
            System.out.println(val);
            System.out.println(session.getId());
            **if(val!=session.getAttribute("val")){
                return "false";
            }**
  }
if(val.equals((String)session.getAttribute("val"))){
    return "false";
}

除了数字,其他都不要用 == != 来比较

这是session跨域共享的问题吧,session.setAttribute写入的sessionId的domain不一样导致在里另一个域取不到cookie,可以把信息存储在Redis里面吧。

新手上路,请多包涵

应该是超时了吧

你获取下sessionId呢。

你直接先比较一下sessionid,看看sessionid是不是同一个先

首先,你用的是同一个电脑的同一个浏览器发送的请求吗?

建议先在浏览器端调试下看response是否返回带有Set-Cookie的头信息, 没有的话很遗憾, 每次请求都是一个全新的session. 检查依赖包是否包含用户认证模块, 如spring-security, shiro 等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏