9

我注意到 Grails 应用程序和大多数其他基于 Java 的 Web 应用程序一样,总是创建一个会话,即使它没有被使用。

是否可以仅在需要时设置 JSESSIONID cookie,例如。当有人尝试登录时?

4

2 回答 2

4

可以通过添加以下页面指令来禁用会话 cookie 的生成:

<%@ page session="false" %>
于 2013-01-28T10:52:43.480 回答
1

我不确定上面使用的是什么版本的 grails,但我在大型应用程序中遇到了类似的问题。我的应用程序在 UI/gsp 和其他提供纯 json/xml 而没有视图的控制器之间拆分。UI 部分应该是唯一使用会话的部分,但服务也返回 JSessionId。

由于应用程序很大,为了排除故障,我使用 grails 1.3.7 和 2.2.1 创建了新应用程序,并带有一个基本控制器:

class FooController {
    static defaultAction = "lookatme"
    def lookatme = {render(view:'lookatme')}
    def hallo = {render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")}
    def somestate = {session.foo = "bar"; render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")}
}

当我在 tomcat 上运行它时,既不也不lookatme返回halloJSessionId。行动somestate确实如此。回顾我们的代码后,我们发现一些地方(例如一些过滤器)在不应该访问会话时尝试访问。

如果您的代码通过 JSessionId cookie 返回会话,而您认为不应该这样做,请确保该操作(或过滤器)中没有使用访问session(或flash?)的代码。

于 2014-03-05T22:03:37.280 回答