会话在firefox私有窗口上无效

时间:2016-02-02 13:23:21

标签: java session firefox gwt web-applications

我在测试环境中测试一个Web应用程序,当我尝试从firefox上的私有窗口打开它时,返回一个空白页面并且日志显示:

java.lang.IllegalStateException: Session was invalidated
16/02/02 14:45:17   at com.evermind.server.http.EvermindHttpSession.getId(EvermindHttpSession.java:467)
16/02/02 14:45:17   at cm.listener.SessionListener.sessionCreated(SessionListener.java:14)
16/02/02 14:45:17   at com.evermind.server.http.HttpApplication.createSession(HttpApplication.java:1971)
16/02/02 14:45:17   at com.evermind.server.http.EvermindHttpServletRequest.unprivileged_getSession(EvermindHttpServletRequest.java:2772)
16/02/02 14:45:17   at com.evermind.server.http.EvermindHttpServletRequest.getSession(EvermindHttpServletRequest.java:2661)
16/02/02 14:45:17   at com.evermind.server.http.EvermindHttpServletRequest.getSession(EvermindHttpServletRequest.java:2655)
16/02/02 14:45:17   at utilities.AdsServerFilter.doFilter(AdsServerFilter.java:39)

以及抛出异常的行如下:

HttpSession session=httpRequest.getSession();

应用程序的生产版本在私人窗口上正常工作..

根据我的知识,私有窗口只提供一个新的私有会话,如果找不到现有的会话,httpRequest.getSession()也会返回一个新会话...任何帮助?

我正在使用firefox 26(我无法更新它以便继续支持GWT扩展)

1 个答案:

答案 0 :(得分:2)

这与GWT无关,但如果您尝试使会话无效,那么它是servlet会话如何工作的一部分,然后在同一请求中返回使用它。

从HttpSession的javadoc(在https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html和其他地方可用),invalidate()方法几乎打破了会话中调用的任何其他方法,包括它自己:

  

无效

     

public void invalidate()

     

使此会话无效,然后取消绑定绑定到它的任何对象。

     

抛出:   java.lang.IllegalStateException - 如果在已经失效的会话上调用此方法

您可以从堆栈跟踪中看到,由于尝试创建会话,OC4J服务器内的某些内容正在会话中调用getId()。此方法也有相同的例外:

  

的getId

     

public java.lang.String getId()

     

返回包含分配给此会话的唯一标识符的字符串。标识符由servlet容器分配,并且取决于实现。

     

返回:   指定分配给此会话的标识符的字符串

     

抛出:   java.lang.IllegalStateException - 如果在无效的会话上调用此方法

现在的问题是"为什么你的会话已经失效?" - 您是否也在同一请求中的代码中的其他位置调用invalidate?或者OC4J中是否存在无法为私有浏览器创建新会话的错误?