[英]Play: Session Cookie not set. Cannot read Cookie using Javascript
为了将授权令牌(应存储在数据库中)发送到服务器,我在.scala.html文件中进行了AJAX调用。
$.ajax({
url: "http://localhost:9000/storeauthcode",
type: 'get',
data: {code: authResult['code']},
contentType: 'application/json',
dataType: 'json',
success: function(result) {
// Handle or verify the server response.
console.log("you're fully logged in now.")
console.log(JSON.stringify(result, null, 2))
console.log("document.cookie = "+document.cookie)
},
error: function (xhr, status, error) {
console.log("error\n")
console.log(xhr.responseText)
}
});
}
在服务器端,我存储身份验证代码并返回json响应
def storeAuthCode = Action { request =>
//store credentials in database
//...
//return some data
Ok(Json.toJson(Map("a"->"b"))).withSession("code"-> "someAuthCode", "id"->"someId")
}
如果我尝试通过AJAX调用的成功处理程序打印所有cookie,
console.log("document.cookie = "+document.cookie)
尽管服务器应该已经创建了会话Cookie(或至少任何内容),但document.cookie似乎为空。 document.cookie应该返回“;” 我的Cookie值的单独列表。
如何成功设置Cookies?
之所以无法阅读,是因为Play的会话Cookie设置了HTTPOnly
标志。
您可以使用几个选项来代替:
code
和id
(例如"a"->"b"
) 您还可以将它们作为response headers
发送,这样就可以在成功回调中获取它们,例如:
Ok(Json.toJson(Map("a" -> "b"))) .withHeaders( "code" -> "foo", "id" -> "bar" ) .withCookies( Cookie("code", "foo"), Cookie("id", "bar") )
jQuery的
success: function(data, textStatus, jqXHR) { console.log(jqXHR.getResponseHeader('code')); console.log(jqXHR.getResponseHeader('id')); },
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.