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的同时手动终止会话,以供客户端范围使用。
- 您想支持群集会话;例如,支持服务器之间的会话故障转移。
答案 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
属性,您可以在j2ee
或cf
会话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会话变量和中提琴!它的工作原理就像它应该的那样。