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

时间:2014-09-22 21:15:48

标签: grails cookies

我正在尝试在Grails应用程序中使用cookie但没有成功。特别是,在测试套件控制器的show()方法中,我想将cookie设置为显示的最新测试套件;也就是说,params.id的值可用于show()方法。然后,在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 )

当我在列表和节目视图之间往返时(在show()之后使用params.id = 277)我得到:

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在多个会话中幸存 - 正如我所料 - 但仍然只在show()方法中可见。

也许我对饼干的理解是错误的,但我仍然被卡住了。任何帮助,将不胜感激。此外,浏览器中必须设置数百个其他cookie,使用我使用过的代码都不能看到,所以有没有办法获取其他cookie?

3 个答案:

答案 0 :(得分:3)

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

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

String home = request.cookies.find{ 'home' == it.name }?.value

答案 1 :(得分:2)

问题是在没有明确设置路径的情况下设置cookie的副作用。假设Grails应用程序的名称是&#34; app&#34;

可以访问它
http://hostname.com/app

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

但是,在单个视图中,例如list对象中的xxx_domain视图,作为

访问
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

答案 2 :(得分:0)

您应该尝试使用此插件:Cookie Plugin

可以找到文档here

下一个代码将向您展示如何设置cookie:

cookieService.setCookie('username', 'cookieUser123')

在这里,如何获取cookie中的值:

cookieService.get('username')

希望有所帮助

修改

对于您的上一个问题,我认为您只能访问您域中的Cookie。