我想创建一个可在我的子域之间共享的 cookie。我正在尝试使用此处显示的 setCookie 方法:https://www.playframework.com/documentation/1.4.x/api/play/mvc/Http.Response.html#setCookie-java.lang.String-java.lang.String-
如果我执行以下操作,它会创建一个 cookie,但域是“xxxx.mydomain.com”...所以完整的域:
response.setCookie("loggedIn", "true");
如果我执行以下操作,cookie 将永远不会出现在我的浏览器中。我做错了什么?
response.setCookie("webLoggedIn", "true", ".mydomain.com", "/", 3600, false);
当我尝试更改似乎破坏我的 cookie 的设置 application.defaultCookieDomain 时,但我认为这是因为我在与生产域不同的域上进行测试,这也是我设置的默认域。
最佳答案
在 Play Framework 1 上,正确的方法是设置 application.defaultCookieDomain
property类似于 yourdomain.com
(没有前缀点)。这样,所有 cookie 都将仅设置为域本身。
如果您将此设置与 .yourdomain.com
一起使用,则所有 cookie 将对所有子域可见,例如 www.yourdomain.com
或 another.yourdomain .com
,而不是域本身。
您提到您在与生产环境不同的域上进行测试,那么您可以为开发环境和 specific domain for production 使用默认域设置,比如:
application.defaultCookieDomain=localhost
# Production configuration
%prod.application.defaultCookieDomain=yourdomain.com
或者,您可以临时更改您的主机文件以将生产域解析为您的本地主机 ip,(/etc/hosts 在 Linux 和 OSX 上):
127.0.0.1 yourdomain.com
注意:在 Play >= 2.1 上,属性更改为 session.domain
,在 Play >= 2.4 上,属性再次更改为 play.http.session.domain
.
关于java - 如何仅为基本域(无子域)创建 Play 1.x cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36854898/