【问题标题】:What actions cause a Coldfusion session to be extended?哪些操作会导致 Coldfusion 会话延长?
【发布时间】:2016-06-20 19:30:37
【问题描述】:

当您在application.cfmapplication.cfc 文件中设置ColdFusion 会话时,您可以定义sessionTimeout,例如:

<cfapplication name = "appname" 
sessionTimeout = #CreateTimeSpan(0, 0, 30, 0)# <!--- 30min timeout --->
sessionManagement = "yes">

我认为 ColdFusion 会话每次都会“延长”或“更新”:

  1. 用户导航到新的 ColdFusion 模板(.cfm 文件)
  2. 用户刷新 Coldfusion 模板(.cfm 文件)
  3. 用户以任何方式访问 ColdFusion 组件(.cfc 文件),包括通过在 .cfc 文件中运行 cffunction 的 ajax 调用。

换句话说,如果用户执行上述任何操作(假设sessionTimeout 是 30 分钟,如上例所示),会话将在执行操作后 30 分钟到期——本质上是“延长”每次用户执行其中一项操作时,会话的生命周期将值设置为 sessionTimeout

这种理解听起来正确吗?是否有任何操作可以“扩展”我缺少的 ColdFusion 会话?我列出的那些实际上是否像我认为的那样表现并“延长”会话?

【问题讨论】:

  • 为了更好地理解,请从客户端/服务器的角度考虑,并在 http 请求等无状态环境中维护状态。如果客户端是浏览器,请删除 cookie,此时您将丢失会话。服务器不知道你是谁了。
  • 是的,ColdFusion 就是这样知道将它的服务器端会话变量与哪个用户关联的。默认情况下,在服务器指定的一段时间后,ColdFusion 认为与 cookie 关联的会话太旧/过期。有一些操作可以将会话的 sessionTimeout 重置为原始的 sessionTimeout(也称为“更新”它),例如刷新 cfm 页面(在作为 HTML/JS 交付之前由服务器处理)访问新的 cfm 页面(也访问服务器)并访问 cfc(也访问服务器。)我只是想知道我是否错过了任何一个。
  • 看起来(默认情况下)在 ColdFusion 中任何击中服务器的东西都会让会话有更多的时间“存活”。
  • 你好像什么都懂。这是一个简单的好奇心问题还是您想要完成的事情?
  • 纯学术。我正在开发一个小型 JS 库,以便我更容易地警告用户他们的 ColdFusion 会话到期,在他们的会话到期时将他们重定向到登录页面,并允许他们根据需要扩展/更新他们的会话到。我只是想确保我考虑了所有可能的更新 CF 会话的方法,因此我使用最好的方法来为服务器提供“心跳”。这是图书馆github.com/Ectropy/clockworkHeart

标签: session coldfusion session-timeout


【解决方案1】:

这里问过类似的问题:Can we renew session in Coldfusion?

亚历克斯说的是真的。如果您查看文档,有一种方法可以在没有 cookie 的情况下维护会话。查看Using client and session variables without cookies部分。

我能想到的在没有用户干预的情况下扩展会话的唯一方法是您可以通过 SessionTracker 找到会话。这是一篇关于它的好帖子:Advanced ColdFusion Session Management

实际上,在 cmets 中,它说如果您通过内置的 java 方法访问会话,则可以扩展它们:

您可能需要注意,只要您通过以下方式访问任何会话 这些方法,您将更新“lastAccessed”时间戳。

【讨论】:

  • 有趣!因此,您可以通过会话跟踪器访问会话来延长会话的寿命。这当然是我从未想过的技术!我想这会产生 4 种已知的“更新”会话的方式——刷新 cfm、打开新 cfm、通过 ajax 访问 cfc 以及通过 sessionTracker 直接访问会话。
猜你喜欢
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2010-12-09
  • 2012-02-08
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多