如何在Grails中设置和检索Cookie?

如何在Grails中设置和检索Cookie?,grails,cookies,Grails,Cookies,我试图在Grails应用程序中使用cookie,但没有成功。特别是,在测试套件控制器的show()方法中,我希望将cookie设置为显示的最新测试套件;即show()方法可用的params.id的值。然后,在list()方法中,我想提供一个快捷方式来显示最近的测试套件(我试图用cookie设置的值) 但是,我设置的cookie(名为“tcCookie”)仅在show()方法中可见,而在list()方法中不可见。代码如下: 在show()中: 当我在列表和显示视图之间来回移动时(在参数为277的s

我试图在Grails应用程序中使用cookie,但没有成功。特别是,在测试套件控制器的show()方法中,我希望将cookie设置为显示的最新测试套件;即show()方法可用的params.id的值。然后,在list()方法中,我想提供一个快捷方式来显示最近的测试套件(我试图用cookie设置的值)

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

在show()中:

当我在列表和显示视图之间来回移动时(在参数为277的show()之后),我得到:

show:cookietccookie
显示:CookieJSessionID
列表:CookieJSessionID
秀:饼干
显示:CookieJSessionID
列表:CookieJSessionID
在我看来,这表明cookie“tcCookie”仅在show()方法中可见,这对我来说是无用的。我需要将其设置为在其他方法中可见

此外,cookie tcCookie可以跨多个会话存活下来——正如我所期望的那样——但仍然只在show()方法中可见


也许我对饼干的理解是错误的,但我还是被卡住了。任何帮助都将不胜感激。此外,浏览器中必须设置数百个其他Cookie,使用我使用的代码,这些Cookie都不可见,因此是否有办法访问其他Cookie?

您应该尝试使用此插件:

可以找到文档

下一段代码显示如何设置cookie:

cookieService.setCookie('username', 'cookieUser123')
在这里,如何获取cookie中的值:

cookieService.get('username')
希望有帮助

编辑


关于最后一个问题,我认为您只能从您的域访问cookie。

或者您可以阅读基本Java文档,并使用普通的
响应
请求
对象来执行此操作:

Cookie homeCookie = new Cookie( 'home', 'name' )
homeCookie.path = '/'
homeCookie.maxAge = 0
response.addCookie homeCookie


问题是设置cookie而不显式设置路径的副作用。假设Grails应用程序的名称为“app”,则可以通过

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

但是,在单个视图中,例如
xxx\u域
对象中的
列表
视图,可作为

http://hostname.com/app/xxx_domain/list
使用代码设置cookie

def newCookie = new Cookie( "myCookie", "cookieValue" )
response.addCookie newCookie
newCookie
的路径设置为
/app/xxx\u domain/list/
,该路径仅在
list()
方法和视图中可见。为了使cookie在应用程序中的任何位置都可见,必须按照上面的回答设置路径,但不能设置为
/
,而是设置为
/app
,如中所示

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

不,没什么区别。我仍然无法在show()方法之外看到cookie。上述代码与原始代码的唯一区别是将maxAge值设置为零,并将路径设置为斜杠,这两者都不会对可见性产生影响。make
request.cookies.each{println”list:cookie${it.properties}>“}
查看更多信息仍然没有区别。JSESSIONID cookie在show()和list()中都可见,但我设置和关心的cookie仅在show()中可见。如果有人真的在Grails的多个视图中使用了Cookie,请告诉我这是怎么可能的,因为阅读文档和向用户提问都没有发现为什么可见性会有差异,或者更重要的是,如何在设置cookie的方法之外的方法中使cookie可见。能否在浏览器的选项中看到cookie?是的,这就指出了问题所在。实际上,正在为cookie设置路径,但是按照您的建议设置路径“/”并不能完成任务。我将以单独的答案更完整地回答我自己的问题。你知道如何删除cookie吗?未将
maxAge
设置为
0
>
String home = request.cookies.find{ 'home' == it.name }?.value
http://hostname.com/app
http://hostname.com/app/xxx_domain/list
def newCookie = new Cookie( "myCookie", "cookieValue" )
response.addCookie newCookie
def newCookie = new Cookie( "myCookie", "cookieValue" )
newCookie.path = "/${grailsApplication.metadata['app.name']}/"
response.addCookie newCookie