我需要更改另一个域的cookie值,我知道我们无法使用javascript做到这一点。是否可以使用servlet?
我正在尝试这样但没有成功?我做错了吗?我在本地主机的一个tomcat中部署了两个Web应用程序Namly Cookies1和Cookies2
cookie1应用程序的Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter pw = response.getWriter(); // String Html = "<HTML><BODY>HI</body></html>"; // pw.write(Html); Cookie cookie = new Cookie("__utmz", "Arvind"); cookie.setDomain("http://localhost:8080/Cookie2"); cookie.setPath("/"); response.addCookie(cookie); //response.getWriter().write(Html); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("CookieSetDm.doGet()"); Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { System.out.println(cookies[i].getName() + " <> "+ cookies[i].getValue()); } } }
出于安全原因,您不能使用托管在另一个域上的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。因此,调用应如下所示:
setDomain
cookie.setDomain("localhost");
正如其他答案所指出的那样,某些浏览器会忽略的cookie localhost,因此您可能根本不想设置cookie的此字段- 这样做的结果是设置了一个cookie,该cookie只返回给设置该cookie的同一主机(大多数时间是您想要的)。
localhost