3

在我在 tomcat 7 上运行的 grails 应用程序中,我在某处使现有的 http 会话 ( session.invalidate()) 无效并创建了一个新会话 ( request.getSession(true))。

但是我的这个新会话并没有在 grails 应用程序中随处可见。因此,我确实得到了' Session already invalidated'。

我不想request.getSession()到处做。我只是在使用“会话”。

Grails 1.3.7 中是否有任何内容,以便这个新会话在应用程序中的每个位置都得到反映。

如果您需要更多信息,请告诉我。

问候

4

1 回答 1

5

好吧,Grails 持有对会话对象的引用,每次您向它请求会话时,它都会返回相同的引用。所以如果您使会话无效,然后请求会话,它将返回相同的无效会话,并导致 'session已经失效的例外..

这应该适合你..

在您执行 session.invalidate 之后执行以下行

//Trick - so that grails doesn't use old invalidated session but rather create new.
GrailsWebRequest.lookup(request).session = null

之后,您可以像往常一样使用会话..您不需要自己创建新会话

有关内部结构,请参见此线程

于 2012-08-16T08:29:26.050 回答