出于安全原因,您不能使用托管在另一个域上的servlet或JavaScript来修改一个域的cookie。参见RFC 6265第4.1.2.3节:
用户代理将拒绝cookie,除非Domain属性为cookie的范围指定一个范围,该范围将包括原始服务器。例如,用户代理将接受来自foo.example.com的Domain属性为“example.com”或“ foo.example.com”的cookie,但是用户代理将不接受Domain属性为的cookie。 “bar.example.com”或“ baz.foo.example.com”。
但是您可以在servlet /脚本中设置cookie,然后在同一主机上的另一个servlet /脚本中读取/修改cookie。您甚至可以从在同一主机名/域的另一个端口上运行的服务器读取或修改在同一主机名/域的一个端口上运行的服务器上的cookie集- 这样就可以使Tomcat在同一服务器上的两个不同端口上运行并在两者之间交换Cookie。
请注意,setDomain
在第一个示例中,您的调用不正确-Cookie的此字段使用域名而不是完整的URL。因此,调用应如下所示:
cookie.setDomain("localhost");
正如其他答案所指出的那样,某些浏览器会忽略的cookie localhost
,因此您可能根本不想设置cookie的此字段- 这样做的结果是设置了一个cookie,该cookie只返回给设置该cookie的同一主机(大多数时间是您想要的)。