当返回呈现类型设置为json时,是否可以在响应时设置cookie?
我可以在使用标准渲染类型返回时在响应对象上设置cookie,稍后,我可以在后续请求中将其恢复。但是,如果我在将返回值渲染为json时设置cookie,我似乎无法在下一个请求对象上取回cookie。这里发生了什么?
当用户点击提交时,这两个操作按预期工作,'basicForm'执行操作的常规表单帖子'withRegularSubmit'。
// first action set the cookie and second action yields the originally set cookie
def regularAction = {
// using cookie plugin
response.setCookie("username-regular", "regularCookieUser123",604800);
return render(view: "basicForm");
}
// called by form post
def withRegularSubmit = {
def myCookie = request.getCookie("username-regular");
// returns the value 'regularCookieUser123'
return render(view: "resultView");
}
当我在使用json从响应返回之前切换到设置cookie时,我没有使用帖子返回cookie。
请求首先获取包含表单的html文档,当触发doc load事件时,通过javascript调用以下请求,如下所示:
var someUrl = "http://localhost/jsonAction";
$.get(someUrl, function(jsonData) { // do some work with javascript}
控制器工作:
// this action is called initially and returns an html doc with a form.
def loadJsonForm = {
return render(view: "jsonForm");
}
// called via javascript when the document load event is fired
def jsonAction = {
response.setCookie("username-json", "jsonCookieUser456",604800); // using cookie plugin
return render(contentType:'text/json') { 'pair'('myKey': "someValue") };
}
// called by form post
def withJsonSubmit = {
def myCookie = request.getCookie("username-json");
// got null value, expecting: jsonCookieUser456
return render(view: "resultView");
}
由于用户按下“提交”按钮而不是通过脚本,数据将返回到服务器。在提交'withRegularSubmit'和'withJsonSubmit'之前,我看到存储在浏览器中的cookie(Firefox),所以我知道它们已经到达了客户端。
答案 0 :(得分:0)
我意识到问题所在 - cookie插件没有为cookie设置路径,因此它存储了“server / controller / action”,而在随后的请求中,当我要求cookie时,插件返回与新请求的路径关联的cookie。
调整插件代码,以便使用统一路径存储cookie。