ColdFusion会话与J2EE会话

时间:2012-08-07 09:45:06

标签: session java-ee coldfusion

ColdFusion会话与J2EE会话有什么好处?

ColdFusion session documentation提到了J2EE会话的好处,但没有提到ColdFusion会话的任何优点。自ColdFusion MX(2002年发布)以来,J2EE会话已经可用,但仍有很多人使用标准的ColdFusion会话。在ColdFusion会话中没有J2EE会话的任何缺点吗?

  

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

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

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

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

4 个答案:

答案 0 :(得分: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中做到这一点。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

ColdFusion中的J2EE会话变量的一个主要缺点是,诸如使它们"secure" cookies之类的更改在实例范围内发生。

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

如果您需要J2EE cookie的文档优势,并且需要cookie安全,则所有需要会话的站点必须位于https上。

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

请注意,由于cfapplication代码具有sessiontype属性,您可以在j2eecf会话Cookie之间进行选择,因此Railo仍有相同的问题,但具有更大的灵活性每个站点的基础。

答案 3 :(得分: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没有看到创建的会话变量。

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

关闭J2EE会话变量和中提琴!它的工作原理就像它应该的那样。

cflocation and session variables