6

ColdFusion 会话与 J2EE 会话相比有什么好处吗?

ColdFusion 会话文档提到了 J2EE 会话的好处,但没有提到 ColdFusion 会话的任何优点。J2EE 会话自 ColdFusion MX(2002 年发布)以来一直可用,但仍有很多人使用标准的 ColdFusion 会话。J2EE 会话是否存在 ColdFusion 会话不存在的任何缺点?

J2EE 会话管理与 ColdFusion 会话管理相比具有以下优势:

  • J2EE 会话管理使用特定于会话的会话标识符 ,jsessionid它是在每个会话开始时重新创建的。
  • 您可以在 ColdFusion 页面和从 ColdFusion 页面调用的 JSP 页面或 Java servlet 之间共享会话变量。
  • Session 作用域是可序列化的(可转换为字节序列,以后可以完全恢复为原始对象)。使用 ColdFusion 会话管理,会话范围是不可序列化的。只有可序列化的范围可以在服务器之间共享。

因此,请考虑在以下任何情况下使用 J2EE 会话管理:

  • 您希望最大限度地提高会话安全性,特别是如果您还使用客户端变量
  • 您希望在单个应用程序中的 ColdFusion 页面和 JSP 页面或 servlet 之间共享会话变量。
  • 您希望能够手动终止会话,同时维护客户端标识 cookie 以供客户端范围使用。
  • 你想支持集群会话;例如,支持服务器之间的会话故障转移。
4

4 回答 4

3

使用 Java EE 会话 cookie 没有严重的缺点,并且使用它们有一些优点,如您的问题中所述。

Java EE 令牌的一个缺点是无法以编程方式轻松修改 cookie。CF 代币可以。您可以将 CF 令牌修改为仅限会话。您还可以将它们修改为仅 SSL 和 httpOnly。

您也可以使 Java EE 令牌仅 SSL 和 httpOnly,但它涉及 JVM 参数。

在 CF9 中,Adobe 还改进了 CF 令牌的随机性,使其更接近 Java EE 令牌。

我真的认为您使用哪一个并不重要(假设您使用的是 CF9 或更高版本)。但是 Java EE 令牌最接近开箱即用的安全工作。但是,如果您想超越仅将 cookie 设置为“仅会话”并且让它们成为仅 SSL 和 httpOnly,您将需要深入研究 JVM 设置。您不能在 App.cfc 中执行此操作。

于 2012-08-07T14:27:18.133 回答
1

CF 原生会话不使用会话 cookie,因此可以在浏览器/机器重启后持续存在,而所有 Java EE 服务器默认使用会话 cookie,因此您的会话只能在浏览器打开时持续。

我找不到在 Servlet JSR 中指定此行为的位置,但在 Servlet Spec 3.0(即不是 JRun)中,您可以为 Java EE 会话 cookie 设置到期日期,以模仿 CF 本机会话行为。

正如 nosilleg 所提到的,这可能是一个好处,但也可能被视为一个安全问题,具体取决于您正在处理的应用程序的安全要求。

于 2012-08-07T12:28:14.463 回答
1

ColdFusion 中 J2EE 会话变量的主要缺点之一是诸如使它们成为“安全”cookie之类的更改发生在实例范围内。

这意味着在该实例上运行的每个站点都必须在 https 下运行,包括 ColdFusion 管理员本身。对于托管多个需要会话的站点的服务器,这通常是有问题的。此外,如果您从内置 Web 服务器运行 ColdFusion 管理员,则需要一些过程才能使其在 ssl 下运行。

如果您需要 J2EE cookie 的记录优势,并且需要 cookie 是安全的,那么所有需要会话的站点都必须在 https 上。

如果您不需要 J2EE cookie 的任何记录优势,并且您正在运行 CF9 或更高版本,那么您最好使用 ColdFusion cookie。

请注意,Railo 仍然存在相同的问题,但具有更大的灵活性,因为cfapplication标签具有一个sessiontype属性,您可以在其中选择基于每个站点的会话 cookie j2eecf

于 2012-09-08T22:24:11.797 回答
0

我有一个小问题,我在请求之间完全丢失了会话变量。我在 J2EE 会话中使用了 cfhttp 帖子。想象一下这种情况: 1. wwwRoot/test 文件夹中的 call.cfm 调用也在同一文件夹中的索引页面。2. index.cfm 将请求发送到 wwwRoot/test/controller/login.cfm。3. login.cfm 设置一些会话变量并将用户发送到 wwwRoot/test/index.cfm 4. index.cfm 看不到创建的会话变量。

所有发送请求都是通过带有 addtoken="yes" 的 cflocation 完成的。

关闭 J2EE 会话变量,中提琴!它按应有的方式工作。

cflocation 和会话变量

于 2014-06-13T13:03:29.203 回答