0

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

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

通过完全无法使用 Session 来防止 Session Fixation 是一项伟大的发明吗?

我仍然希望能够以HttpSession它本来的方式使用,如果我无法将会话相关数据保存到它,那么通过这种行为,会话的想法会变得荒谬(在我看来)......

我看错了吗?难道我做错了什么?


更新

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

4

1 回答 1

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,但由于我没有更改我所在的页面(因为它是所谓的“单页应用程序”,所以我总是在同一index.gsp页面)Tomcat 将其视为失败的登录尝试并继续Session为每个请求创建新对象-我的页面上POST有很多s ;)POST

因此,作为快速修复,我从webapps目录中删除了管理器并从 中删除了Realm声明,server.xml因为我已经在自己的后端Session成功登录尝试创建了一个新的。Grails

于 2013-08-01T06:51:31.210 回答