Session 同步servlet会话

Session 同步servlet会话,session,servlets,Session,Servlets,我创建了一个web应用程序,它使用OAuthentication登录到Twitter,登录过程在单个servlet上成功运行。在该servlet上,我为用户获取会话。但是,一旦我第一次移动到另一个servlet并尝试再次获取会话,就会创建一个新的servlet。我以为web应用程序会读取客户端cookies并为每个客户端创建一个会话?在下面,您可以看到客户机会话ID在整个OAuth过程中保持不变,但在新的servlet上会发生变化。我放进了编码器,以防曲奇饼不起作用。但一旦我重做OAuth进程并

我创建了一个web应用程序,它使用OAuthentication登录到Twitter,登录过程在单个servlet上成功运行。在该servlet上,我为用户获取会话。但是,一旦我第一次移动到另一个servlet并尝试再次获取会话,就会创建一个新的servlet。我以为web应用程序会读取客户端cookies并为每个客户端创建一个会话?在下面,您可以看到客户机会话ID在整个OAuth过程中保持不变,但在新的servlet上会发生变化。我放进了编码器,以防曲奇饼不起作用。但一旦我重做OAuth进程并再次尝试,所有内容都会同步

Creating Authentication Session...
Session ID before getting Request Token: 5E5932F144E4838EFDD398407D4BA351
Retrieving request token...
Request token retrieved...
Session ID after getting Request Token: 5E5932F144E4838EFDD398407D4BA351
Swapping request token for access token...
Session ID: F97463A1A2D239B7E6D15D1C5FDAE26B
Sep 9, 2010 1:37:03 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet PostUpdatesServlet threw exception
java.lang.NullPointerException
    at com.twf.PostUpdatesServlet.doPost(PostUpdatesServlet.java:31)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:637)

会话依赖于域和上下文。如果两个servlet都在不同的上下文(不同的webapp)上运行,则需要配置servlet容器以允许在上下文之间共享会话。在Tomcat和克隆中,您可以通过将
emptySessionPath
attribtue设置为
true
来实现这一点


如果这些servlet实际上运行在相同的上下文中,那么问题就出在其他地方。根据目前为止所提供的信息很难确定。可能调用了
HttpSession#invalidate()
,或者客户端发送了无效的
jsessionid
cookie请求。

感谢您的快速响应。两个servlet都在相同的上下文/相同的web应用程序中运行。我在一个servlet上运行OAuth,并将响应传递给JSP。在这个JSP中有一个指向新servlet的链接,在这个新servlet中会话ID会改变。我很确定我没有在webapp中的任何地方使用invalidate,所以我要找出为什么客户端cookie会使ID无效或者发送无效的ID。