我正在尝试在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?
答案 0 :(得分:3)
或者您可以阅读基本的Java文档并使用普通的response
和request
对象来执行此操作:
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。