我注意到 Grails 应用程序和大多数其他基于 Java 的 Web 应用程序一样,总是创建一个会话,即使它没有被使用。
是否可以仅在需要时设置 JSESSIONID cookie,例如。当有人尝试登录时?
我注意到 Grails 应用程序和大多数其他基于 Java 的 Web 应用程序一样,总是创建一个会话,即使它没有被使用。
是否可以仅在需要时设置 JSESSIONID cookie,例如。当有人尝试登录时?
可以通过添加以下页面指令来禁用会话 cookie 的生成:
<%@ page session="false" %>
我不确定上面使用的是什么版本的 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
返回hallo
JSessionId。行动somestate
确实如此。回顾我们的代码后,我们发现一些地方(例如一些过滤器)在不应该访问会话时尝试访问。
如果您的代码通过 JSessionId cookie 返回会话,而您认为不应该这样做,请确保该操作(或过滤器)中没有使用访问session
(或flash
?)的代码。