【问题标题】:Grails without session没有会话的 Grails
【发布时间】:2013-01-03 00:11:16
【问题描述】:

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

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

【问题讨论】:

  • 你为什么要担心这个?
  • 两个原因:1)如果你创建一个会话,会设置一个cookie。如果我以正确的方式解释新的“欧洲 Cookie 法”,您必须在设置 cookie 之前向访问者要求分配。 2)会话使用资源。如果我不需要会话,为什么要创建一个?如果我公开了一个 REST 接口并且客户端忽略了 cookie,每个请求都会创建一个新会话:-(
  • 你应该做更多的研究: 不需要同意 任何如果不是因为它的存在,网站将不再可用的 cookie,例如维护客户购物篮内容的会话 cookie通过结帐过程。也就是说,如果您要使用相同的 cookie 来跟踪客户行为而不事先询问他们,那么这需要获得同意。 enchiladadigital.com/services/cookie-audits/…
  • this 讨论可能会有所帮助,this JIRA 也是如此。 ==================================================== ========================== net net,这个指令应该在你想要避免创建会话的面向外部的页面上工作 。不过自己没试过
  • @uchamp 如果您不呈现 GSP,而是呈现 XML/JSON 输出,那该怎么办?

标签: grails jsessionid


【解决方案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 上运行它时,lookatmehallo 都不会返回 JSessionId。动作somestate 确实如此。回顾我们的代码后,我们发现了一些地方(例如一些过滤器)在不应该访问会话时尝试访问。

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

【讨论】:

    【解决方案2】:

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

    <%@ page session="false" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2017-02-06
      • 2010-12-24
      • 2012-03-15
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多