我们正在使用 Play 开发应用程序! 1.2.5 并部署到 Google App Engine。 在 application.conf 中,我已将 session cookie 设置为 httpOnly 且安全:
application.session.httpOnly=true
application.session.secure=true
当我在本地发出请求时,我可以看到 header 设置正确:
Set-Cookie: PLAY_SESSION=something;Expires=Mon, 10-Dec-2012 14:51:56 GMT;Path=/;Secure;HTTPOnly
当我部署到 Google App Engine 时,我没有在设置的 cookie 上看到任何 Secure 或 HTTPOnly 标志。怎么会?
网上找不到类似的问题。我读到的最接近的东西是 GAE 不支持 response.setHttpOnly(或类似的东西)但是来自 Play!源代码 我可以看到一个简单的 Cookie 正在创建,其 httpOnly 值被设置为 bool 值并写入响应。不知道为什么 GAE 不接受这个。
谢谢!
最佳答案
调试时可以做的事情:
- 对不同的 cookie(或将 httpOnly 参数设置为 true 的 response.setCookie)而不是 session cookie 执行 response.setHttpOnly,以查看问题是否适用于所有 cookie。
- 在您的 Controller 中,检查 request.cookies(包含所有收到的 cookie 的映射)以查看收到的 cookie 的 httpOnly 值。
- 根据以上两项,可能会检查您在 request.cookies 和 response.cookies 中的内容是否与 httpOnly 一致
- 根据以上情况,可能会编辑响应 cookie 以将 httpOnly 设置为 true
- 如果以上都不起作用,可以手动生成一个“Set-cookie” header 。从 cookies 映射中获取值,从映射中删除该 cookie 以使其不重复,并对手动创建的 cookie 执行 response.setHeader
所有这些可能无法为您提供解决方案,但可能会帮助您了解正在发生的事情以及是否可能。
关于google-app-engine - 使用 Play Framework 和 Google App Engine 的 HttpOnly/secure cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802607/