gpt4 book ai didi

grails - 如何在 Grails 中设置和检索 cookie?

转载 作者:行者123 更新时间:2023-12-02 07:00:22 27 4
gpt4 key购买 nike

我尝试在 Grails 应用程序中使用 cookie,但没有成功。特别是,在测试套件 Controller 的 show() 方法中,我想将 cookie 设置为显示的最新测试套件;也就是说,可用于 show() 方法的 params.id 值。然后,在 list() 方法中,我想提供一个显示最新测试套件的快捷方式(我尝试使用 cookie 设置的值)。

但是,我设置的 cookie(名为“tcCookie”)仅在 show() 方法中可见,而在 list() 方法中不可见。代码如下:

在 show() 中:

request.cookies.each { println "show: cookie ${it.name} <${it.value}>" }

在列表()中:

request.cookies.each { println "list: cookie ${it.name} <${it.value}>" }

我通过以下方式在 show() 方法中设置 cookie:

Cookie cookie = new Cookie( "tcCookie", params.id )
cookie.maxAge = 315360000000L
response.addCookie( cookie )

当我在列表和显示 View 之间来回切换时(在 params.id = 277 的 show() 之后),我得到:

show: cookie tcCookie <277>
show: cookie JSESSIONID <9DEBFB40F78B5E24A92C750157342069>
list: cookie JSESSIONID <9DEBFB40F78B5E24A92C750157342069>
show: cookie tcCookie <277>
show: cookie JSESSIONID <9DEBFB40F78B5E24A92C750157342069>
list: cookie JSESSIONID <9DEBFB40F78B5E24A92C750157342069>

在我看来,这表明cookie“tcCookie”仅在show()方法中可见,这对我来说毫无用处。我需要设置它,以便它在其他方法中可见。

此外,cookie tcCookie 在多个 session 中存活 - 正如我所期望的 - 但仍然仅在 show() 方法中可见。

也许我对cookie的理解是错误的,但我仍然陷入困境。任何帮助,将不胜感激。此外,浏览器中肯定设置了数百个其他 cookie,但使用我使用的代码都看不到这些 cookie,那么有什么方法可以获取其他 cookie 吗?

最佳答案

该问题是在未显式设置路径的情况下设置 cookie 的副作用。假设 Grails 应用程序的名称是“app”,它将通过

访问
http://hostname.com/app

这将导致 cookie JSESSIONID 设置为 /app/JSESSIONID ,它将在应用程序中的任何位置可见。由于应用程序的名称在应用程序中可用,如 grailsApplication.metadata['app.name'],因此可以自动确定 app 的实际值。

但是,在单个 View 中,例如 xxx_domain 对象中的 list View ,访问方式为

http://hostname.com/app/xxx_domain/list

使用代码设置 cookie

def newCookie = new Cookie( "myCookie", "cookieValue" )
response.addCookie newCookie

newCookie 的路径设置为 /app/xxx_domain/list/ ,该路径仅在 list() 方法中可见并查看。为了使该 cookie 在应用程序中的任何位置都可见,必须按照上面的答案设置路径,但不能设置为 /,而是设置为 /app,如下所示

def newCookie = new Cookie( "myCookie", "cookieValue" )
newCookie.path = "/${grailsApplication.metadata['app.name']}/"
response.addCookie newCookie

关于grails - 如何在 Grails 中设置和检索 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com