【问题标题】:Cookie sharing across application deployed on same server跨部署在同一服务器上的应用程序共享 Cookie
【发布时间】:2013-03-16 23:33:17
【问题描述】:

我有两个基于 struts 1.3 框架的应用程序并部署到 glassfish 服务器 3.1.2

app-1 有自己的 url http:localhost:8080/app-1

&

app-2 有自己的 url http:localhost:8080/app-2

功能:app-1 & app-2 支持多种语言。用户通过 app-1 登录并为所选语言设置 cookie。

后来,从 app-1 到 app-2 有几个 href。 href 更通用。根据在 app-1 选择的语言到达 app-2 后,会显示各种页面。

问题是,app-2 如何知道 app-1 中选择的语言是什么?如何将 app-1 设置的 cookie 设置为 app-2 ?或者还有其他选择吗?

【问题讨论】:

  • 您可以通过添加lang 查询字符串参数的GET 请求传递语言(或任何其他信息)。

标签: jsp servlets cookies glassfish


【解决方案1】:

在创建 cookie 时将 Cookie 中的 path 属性设置为 /。 Servlet 3.0 提供了应用程序设置 cookie 属性的 API。

如果设置了路径(应用程序上下文根),则仅当 url 以该路径开头时才会发送 cookie。将其设置为 / 将使浏览器能够为该域内的所有应用程序发送 cookie。

Java 文档:setPath ......

public void setPath(java.lang.String uri)
指定客户端应返回 cookie 的 cookie 路径。

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

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

参数: uri - 指定路径的字符串

【讨论】:

    【解决方案2】:

    出于安全原因,似乎无法访问为不同路径设置的 cookie,即使它位于同一域中:

    https://stackoverflow.com/a/1968108/1916098

    您可以尝试另一种方法:如果两个 servlet 共享相同的上下文,您可以使用它 (ServletContext) 在它们之间共享信息。看看这个:

    How can I share a variable or object between two or more Servlets?

    【讨论】:

    • 如果服务器在不同的环境中,这将不是一个正确的方法。最好的选择是使用查询字符串参数。
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2012-08-19
    • 2012-11-18
    相关资源
    最近更新 更多