【问题标题】:Are there any mature Cookie based HttpSession implementations?有没有成熟的基于 Cookie 的 HttpSession 实现?
【发布时间】:2015-04-15 13:33:10
【问题描述】:

我想在 serlvet 容器中使用基于 cookie 的 HttpSession。所有会话数据都应存储在 cookie 中。这在 servlet 应用程序中似乎并不常见。在Rails (Session)Playframework (Session) 中,这种会话处理是默认的。为什么这种情况如此罕见?

具体来说,我需要 JBoss EAP6 的解决方案(没有会话范围的 bean)。我发现了两个基于 serlvet 过滤器的实现:

你知道任何替代方案吗?

(如果可能,我不想笼统地讨论利弊)

【问题讨论】:

  • 您可能想澄清一下,您的意思是会话存储在 cookie 中。

标签: java ruby-on-rails servlets playframework httpsession


【解决方案1】:

在 Java EE 中将会话数据保存在 cookie 中是不常见的……因为在所有 servlet 容器中都实现了HttpSession

在 cookie 持久会话中,您有大小限制,并且您必须使用签名数据以避免会话客户端的操作。如果要在会话中保留敏感信息,则必须加密数据。并且所有会话数据都与每个请求和响应进行交换。这些限制随着HttpSession 而消失。

cookie 持久会话的最大兴趣在于,您可以拥有一个由多个服务器组成的场,这些服务器可以响应任何请求,因为会话包含在请求中。但这可以在 Java EE 中通过在反向代理级别使用 sticky session 来完成(因为您几乎在每个严肃的数据中心都有反向代理):反向代理知道会话并将请求传递给拥有它的服务器。

一些 Java EE 服务器甚至有共享会话的概念。

恕我直言,在 Java 中实现 cookie 持久会话并不是很难,只是对于专业用途而言,它还不够重要。

【讨论】:

  • 我知道 HttpSession 通常是由 servlet 容器实现的。问题更多的是为什么他们不提供基于 cookie 的实现作为替代方案。我不想在这里讨论一般的利弊。比你说的还要多。几乎所有 JavaEE 服务器都提供某种会话复制,我知道粘性会话。但这不是我的问题。我尽量避免自己实现签名和加密。
  • 由于我自己不是一个servlet容器程序员,以下只是我个人的看法,但我认为是因为主要的servlet容器开发者并没有发现它足够有用。这些容器的用户并没有要求它作为一项重要功能。
猜你喜欢
  • 2011-03-26
  • 2011-12-30
  • 2018-03-22
  • 2012-01-17
  • 2011-08-13
  • 2013-02-12
  • 1970-01-01
  • 2017-04-02
  • 2010-12-25
相关资源
最近更新 更多