是否可以在Ajax应用程序中使用HttpSession和Tomcat7?

时间:2013-07-31 12:19:25

标签: ajax session tomcat7 grails-2.0

我正在Tomcat 7 Servlet容器上使用Grails 2.2.3后端开发Ajax Web应用程序。当我从我的IDE运行带有grails run的应用程序时,一切都像魅力(我使用提供Tomcat 7实现的tomcat-grails-plugin)。

现在,如果我将我的应用程序部署到独立的Tomcat 7,我将无法再使用HttpSession,因为Tomcat正在为每个Ajax请求创建一个全新的会话,这使我无法工作与会话对象了。我猜我不是唯一一个在Tomcat 7上部署Ajax应用程序的人,我想在这里询问是否有人可以就如何解决这个问题给我一些建议?

阻止会话修复的伟大发明是否完全无法使用Session?

我仍然希望能够按照预期的方式使用HttpSession,如果我无法保存与会话相关的数据,那么会话的想法就会变得荒谬(在我看来)对它...

我看到了什么问题吗?我做错了吗?


更新

经过一些研究后我发现只有POST请求会触发在Tomcat中创建新会话...有人可以解释这种行为吗?

1 个答案:

答案 0 :(得分:0)

经过一些研究(甚至通过验证器类的源代码(http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/catalina/authenticator/)),我意识到它必须对Realm文件中声明的server.xml做一些事情。影响同一[engine] / [host]中的所有其他webapps,默认情况下会与Tomcat Manager一起使用。

只要我发送GET请求一切正常,但如果我发送POST请求,则会创建一个新的Session但是因为我没有更改页面我m on(因为它是一个所谓的“单页面应用程序”,我总是在同一个index.gsp页面上)Tomcat将其视为失败的登录尝试,并继续为每个{{{{{}创建新的Session个对象1}}请求 - 我的页面上有很多POST;)

因此,作为快速解决方案,我从POST目录中删除了管理员,并从webapps删除了Realm声明,因为我已经在创建新的server.xml我自己Session后端成功登录尝试。