繁体   English   中英

播放:未设置会话Cookie。 无法使用Javascript读取Cookie

[英]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标志。

您可以使用几个选项来代替:

  1. 在JSON对象中发送codeid (例如"a"->"b"
  2. 您还可以将它们作为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM