Jetty 7不允许我自定义会话cookie路径

时间:2010-04-18 23:51:12

标签: session cookies jetty

使用Jetty 7.0.2,我无法设置自定义会话cookie路径。

我使用apache在同一服务器上托管多个站点,以将请求代理到正确的上下文。 (将http替换为htp,因为stackoverflow认为我的多个链接可能是垃圾邮件)

<VirtualHost *:80>
  ServerName context.domain.com

  ProxyRequests On
  ProxyPreserveHost Off

  <Proxy *:80>
    Order deny,allow
    Allow from 127.0.0.1
  </Proxy>

  ProxyPass / htp://localhost:8080/context/
  ProxyPassReverse / htp://localhost:8080/context/

  <Location />
    Order allow,deny
    Allow from all
  </Location>
</VirtualHost>

Jetty在端口8080上的同一台服务器上运行,我的上下文可用@ / context

用户访问应用程序@ htp://context.domain.com但是jetty正在设置会话cookie @ / context的路径。这可以防止浏览器访问cookie,因为没有使用上下文的实际路径。我需要覆盖Jetty的默认设置来设置上下文的cookie,并在根目录(/)设置路径。

在我的Jetty的webdefault.xml中,我有以下内容,部分正常工作:

<context-param>
  <param-name>org.eclipse.jetty.servlet.SessionCookie</param-name>
  <param-value>CustomCookieName</param-value>
</context-param>
<context-param>
  <param-name>org.eclipse.jetty.servlet.SessionPath</param-name>
  <param-value>/</param-value>
</context-param>

使用自定义名称正确设置cookie,但不设置SessionPath。无论我将值设置为......它都拒绝在任何路径上设置cookie但是/ context。

这让我很生气,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

我不熟悉Jetty,但听起来好像客户端 访问/ Context,这是生成cookie的地方。我会仔细检查代码并确保您的cookie不是在您网站的/ Context上生成的。用户连接到域根目录并不重要,cookie不会查看用户连接的位置,它会查看生成cookie的位置。

如果您的cookie是从/ Context生成的,您的用户甚至可以访问htp://foobar.domain.com,它仍然看起来像来自/ Context,因为它来自于它。解决它的唯一方法是在根级别而不是在/ Context区域的页面上生成cookie。这是为了防止cookie怪物从其不属于的网站窃取cookie信息(如果你在foo.yahoo.com上的网站上托管并创建一个cookie,这将保留你不拥有的不同网站(bar.yahoo)查看你的cookie。这是设计的。

答案 1 :(得分:1)

听起来你已经点击了this bug,导致Jetty总是使用会话cookie的上下文路径。