【问题标题】:Write and Read Cookies in different Applications在不同的应用程序中写入和读取 Cookie
【发布时间】:2012-09-25 11:38:43
【问题描述】:

我在 Jboss 中运行了两个应用程序,我可以在一个应用程序中写入一个 cookie 并在另一个应用程序中读取吗?

例如,如果我有两个 Servlet: - localhost:8080/Application1 上的 WriterCookieServlet - 本地主机上的 ReaderCookieServlet:8080/Application2

WriterCookieServlet:

 Cookie cookie = new Cookie("cookie", "cookieValue");
 response.addCookie(cookie);
 response.sendRedirect("localhost:8080/Application2");

然后在 ReaderCookieServlet 上我想读取这个 cookie。

【问题讨论】:

  • AFAIK,这应该是可能的。

标签: java servlets cookies


【解决方案1】:

我认为@galuano1 是对的:这确实应该是可能的。不过,请确保 path 是正确的。它用于确定某个 cookie 是否对 Web 应用程序可见。

来自Cookie Javadoc

您指定的目录中的所有页面以及该目录的子目录中的所有页面都可以看到 cookie。 cookie 的路径必须包含设置 cookie 的 servlet,例如 /catalog,这使得 cookie 对服务器上 /catalog 下的所有目录可见。

有关为 cookie 设置路径名的更多信息,请参阅 RFC 2109(可在 Internet 上获得)。

我会说你应该使用/ 作为目录,因为这两个应用程序将有不同的上下文根。

【讨论】:

    【解决方案2】:

    只要cookie中指定的域相同(这里是localhost),cookie就可以被两个不同的应用程序读取

    【讨论】:

      【解决方案3】:

      这是真的:如果 cookie 来自同一个域,则应用程序可以从理论上读取它。这意味着应用程序可以使用它,但这并不意味着应用程序具有解释它所需的秘密

      这里的问题可能与理论部分无关,而与技术部分有关:如果 cookie 不是明文(应该是),则需要由需要读取内容的目标应用程序打开
      如果伪造 cookie 的应用程序与需要读取它的应用程序相同,这通常是开箱即用的。
      但是如果是应用1伪造的,需要应用2解密,则需要确保你使用的这个命令:

      Cookie cookie = new Cookie("cookie", "cookieValue");
      

      不使用任何特定于应用程序的秘密来加密 cookie,否则它永远不会被其他应用程序打开。
      当然答案可能会根据您使用的技术而改变,不知道 Java 中的行为,我知道许多技术使用基于机器的秘密来加密和签署 cookie。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多