我试图在 Grails 应用程序中使用 cookie,但没有成功。特别是,在测试套件控制器的 show() 方法中,我想将 cookie 设置为显示的最新测试套件;也就是说,可供 show() 方法使用的 params.id 的值。然后,在 list() 方法中,我想提供一个快捷方式来显示最新的测试套件(我试图用 cookie 设置的值)。
但是,我设置的 cookie(名为“tcCookie”)仅在 show() 方法中可见 - 而在 list() 方法中不可见。这是代码:
在展示()中:
request.cookies.each { println "show: cookie ${it.name} <${it.value}>" }
Run Code Online (Sandbox Code Playgroud)
在列表()中:
request.cookies.each { println "list: cookie ${it.name} <${it.value}>" }
Run Code Online (Sandbox Code Playgroud)
我通过以下方式在 show() 方法中设置了 cookie:
Cookie cookie = new Cookie( "tcCookie", params.id )
cookie.maxAge = 315360000000L
response.addCookie( cookie )
Run Code Online (Sandbox Code Playgroud)
当我在列表和显示视图之间来回切换时(在 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>
Run Code Online (Sandbox Code Playgroud)
在我看来,这表明 cookie“tcCookie”仅在 show() 方法中可见,这对我来说是无用的。我需要设置它以便它在其他方法中可见。
此外,cookie tcCookie 可以在多个会话中存活 - 正如我所期望的 - 但仍然仅在 show() 方法中可见。
也许我对 cookie 的理解是错误的,但我还是卡住了。任何帮助,将不胜感激。此外,浏览器中必须设置了数百个其他 cookie,使用我使用的代码都看不到这些 cookie,那么有什么方法可以访问其他 cookie?
该问题是在未显式设置路径的情况下设置 cookie 的副作用。假设 Grails 应用程序的名称是“app”,它将通过以下方式访问
http://hostname.com/app
Run Code Online (Sandbox Code Playgroud)
这将导致 cookie JSESSIONID 设置为/app/JSESSIONID在应用程序中的任何位置都可见。由于应用程序的名称在应用程序内可用,因此可以自动grailsApplication.metadata['app.name']确定 的实际值。app
但是,在单个视图中,例如对象list中的视图xxx_domain,可以作为
http://hostname.com/app/xxx_domain/list
Run Code Online (Sandbox Code Playgroud)
使用代码设置 cookie
def newCookie = new Cookie( "myCookie", "cookieValue" )
response.addCookie newCookie
Run Code Online (Sandbox Code Playgroud)
将设置路径newCookie仅/app/xxx_domain/list/在方法和视图中可见list()。为了使该 cookie 在应用程序中的任何位置都可见,必须按照上面的答案中所示设置路径,但不是设置为/,而是/app设置为
def newCookie = new Cookie( "myCookie", "cookieValue" )
newCookie.path = "/${grailsApplication.metadata['app.name']}/"
response.addCookie newCookie
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9037 次 |
| 最近记录: |