Java 在spring控制器中维护相同的会话

Java 在spring控制器中维护相同的会话,java,session,spring-mvc,Java,Session,Spring Mvc,我有两个控制器UserSignInControl和PageNavigationController。我想在这两个控制器中维护相同的HttpSession,但我在diff页面中发现了一个diff会话。我还在控制器页面中添加了@SessionAttributesuserDetails。请告知我如何创建它 用户签名控制器 @RequestMapping(value="/analyzeinternet1.html", method=RequestMethod.GET) public ModelA

我有两个控制器UserSignInControl和PageNavigationController。我想在这两个控制器中维护相同的HttpSession,但我在diff页面中发现了一个diff会话。我还在控制器页面中添加了@SessionAttributesuserDetails。请告知我如何创建它

用户签名控制器

@RequestMapping(value="/analyzeinternet1.html", method=RequestMethod.GET)
    public ModelAndView getSocialMediaAdmin(HttpSession session, Model model) {
        LOG.info(" session..." + session);
        ModelAndView mv = null;

        UserProfile up = (UserProfile) session.getAttribute("userDetails");
        if(up == null) { //Checking whether the user is already signed up or not. If not, the user is redirected to login page. 
            LOG.info("No user in session...");
            mv = new ModelAndView("redirect:/login.html");
        } else {
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            model.addAttribute("userDetails", up);
            session.setAttribute("userDetails", up);
            mv.addObject("clientId", up.getUserId());
        }

        LOG.info(mv);
        return mv;
    }
@RequestMapping(value="/analyzeinternet.html", method=RequestMethod.GET)
    public ModelAndView getAnalyzeInternet(HttpSession session, Model model) {
        LOG.info("-----session..." + session);
        //LOG.info("-----userprofile..." + userDetails);
        ModelAndView mv = null;
         up = (UserProfile) session.getAttribute("userDetails");
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            //mv.addObject("clientId", up.getUserId());
            return mv;
    }
页面导航控制器

@RequestMapping(value="/analyzeinternet1.html", method=RequestMethod.GET)
    public ModelAndView getSocialMediaAdmin(HttpSession session, Model model) {
        LOG.info(" session..." + session);
        ModelAndView mv = null;

        UserProfile up = (UserProfile) session.getAttribute("userDetails");
        if(up == null) { //Checking whether the user is already signed up or not. If not, the user is redirected to login page. 
            LOG.info("No user in session...");
            mv = new ModelAndView("redirect:/login.html");
        } else {
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            model.addAttribute("userDetails", up);
            session.setAttribute("userDetails", up);
            mv.addObject("clientId", up.getUserId());
        }

        LOG.info(mv);
        return mv;
    }
@RequestMapping(value="/analyzeinternet.html", method=RequestMethod.GET)
    public ModelAndView getAnalyzeInternet(HttpSession session, Model model) {
        LOG.info("-----session..." + session);
        //LOG.info("-----userprofile..." + userDetails);
        ModelAndView mv = null;
         up = (UserProfile) session.getAttribute("userDetails");
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            //mv.addObject("clientId", up.getUserId());
            return mv;
    }
两个会话id不同,我的重定向代码为

<a href="<%=request.getContextPath()%>/analyzeinternet.html">

您的意思是说,您将应用程序从一个页面浏览到第二个页面,而第二个页面使用的是PageNavigationController,而您没有获得相同的会话?您如何检查它是否不是同一个会话?您确定要在会话中设置userDetails吗


还要检查会话cookie是否在请求中正确传递。您可以使用firebug或chrome控制台检查响应和请求头中的cookie值。

我找到了答案。这段代码是在context.xml中编写的

<Context path="/sm" docBase="sm"
        debug="5" reloadable="true" crossContext="true" cookies="false">

其中cookies=false,它应该是cookies=true

你能告诉我你发现了什么不同吗?正如我所知,所有的控制器都是单例的,所以会话跨越控制器是没有问题的。我有打印会话,它得到了diff值。是的,我在session中设置了userprofiles,请调试会话cookie,confirmit在控制台中给出diff会话id