Servlet中找不到Java会话ID

时间:2014-10-15 01:31:47

标签: java jsp spring-mvc servlets

我遇到了令我困惑的Java问题。以下是我对此网络应用程序流程的快速解释。

  1. 用户单击调用服务器的jsp页面上的按钮
  2. 服务器代码" ManagerWebsiteFlow.java"执行一些逻辑并将一些数据放入请求会话属性
  3. 然后将控件传递给" output.jsp"页
  4. output.jsp页面包含html图像标记
  5. html图像标记调用服务器" ManagerStreamReport.java",此类创建一个png&将其返回到图片标记。
  6. 这一切在我的本地环境中使用四种主要浏览器都可以正常工作。 但是当代码在线时,它在FF和Chrome中不起作用。会话属性在步骤5中丢失。

    额外信息。在FF和Chrome中,如果我回到第1步再试一次,那么一切正常没有会话丢失的问题。它继续正常工作,直到我关闭浏览器并重新开始。

    我使用的是Tomcat 7,Java 7和Spring MVC第4版。 下面是我的代码的主要部分以及一些日志跟踪,您可以在其中查看FF和Chrome中的会话ID丢失情况,而不是IE和Safari中的会话ID。

    是时间问题吗?为什么FF和Chrome是唯一不起作用的? 关于是什么导致这个问题的任何想法?关于如何修理或我还能检查什么的任何建议?

    ManagerWebsiteFlow {
        public String build(HttpServletRequest request) {
            request.getSession().setAttribute("MyObjectName", "MyContent"); 
            log.error("MWF The Session ID Is : " + request.getSession().getId());
            // More code here
        }
    }
    
    
    <!-- output.jsp -->
    <html>
        <body>
            <img src="http://www.onlinewebsite.com/streamReport.do" id="mainImg" /> 
        </body>
    </html>
    
    ManagerStreamReport{
        public boolean convertChart(HttpServletRequest request, HttpServletResponse response) {
            log.error("MCC The Session ID Is : " + request.getSession().getId());
            // More code here
        }
    }
    
    
    *** LOG4J File **
    
    -- Logging when using Chrome
    10-14@20:56:13 ERROR (ManagerWebsiteFlow.java:51)     - MWF The Session ID Is : 9804070CF5C01EB1B8DA4690158A9E2B
    10-14@20:56:13 ERROR (ManagerStreamReport.java:34)    - MSC The Session ID Is : 699645602C235EE27D829DAAEBF7DF55
    
    -- Logging when using FF
    10-14@20:55:26 ERROR (ManagerWebsiteFlow.java:51)     - MWF The Session ID Is : 7DB390D949399B26AFAB5D4071872738
    10-14@20:55:26 ERROR (ManagerStreamReport.java:34)    - MSC The Session ID Is : B078DB4F3B3B55A03477E12972AC617A
    
    -- Logging when using IE
    10-14@20:57:04 ERROR (ManagerWebsiteFlow.java:51)     - MWF The Session ID Is : B344BEDE232C7574332A55C0D28D2561
    10-14@20:57:05 ERROR (ManagerStreamReport.java:34)    - MSC The Session ID Is : B344BEDE232C7574332A55C0D28D2561
    
    -- Logging when using Safari
    10-14@20:57:50 ERROR (ManagerWebsiteFlow.java:51)     - MWF The Session ID Is : FB8B892E5E20049421BA185EEC3B3FAA
    10-14@20:57:51 ERROR (ManagerStreamReport.java:34)    - MSC The Session ID Is : FB8B892E5E20049421BA185EEC3B3FAA
    

1 个答案:

答案 0 :(得分:0)

如果将来有人遇到这种情况,以下是我的问题的解决方案。 html图片代码使用“http://www.onlinewebsite.com”但是当我进入网站时,我使用的是“onlinewebsite.com”。因此,没有找到“不同”域的现有会话。

为避免此问题,server.xml上下文中需要以下两个属性:

sessionCookiePath="/" 
sessionCookieDomain=".onlinewebsite.com">

这适用于tomcat 7。