【问题标题】:ColdFusion 10 application.cfc error: counting number of active sessionsColdFusion 10 application.cfc 错误:计算活动会话数
【发布时间】:2012-06-27 23:17:19
【问题描述】:

在 adobe Coldfusion 10 文档Defining the application and its event handlers in Application.cfc 中,有一个示例 Application.cfc 包含以下函数。看了代码,想知道下面的代码是不是有错别字/bug:

<cffunction name="onSessionStart"> 
    ...
    <cflock timeout="5" throwontimeout="No" type="EXCLUSIVE" scope="SESSION"> 
        <cfset Application.sessions = Application.sessions + 1> 
    </cflock> 
    ...
</cffunction> 

应该是:

  • (A) cflock ... scope="SESSION"
  • (B) cflock ... scope="APPLICATION"

?

如果是(A)那我就糊涂了。有人可以解释为什么吗?

【问题讨论】:

  • 自动调用 onSessionStart 时,它是线程安全的。如果你自己调用它,它不是。这将是我首先锁定的理由。所以我的投票是,这是一个错字,应该是 APPLICATION。
  • 谷歌coldfusion.runtime.SessionTracker!我想这就是你想要的。

标签: coldfusion coldfusion-10 application.cfc


【解决方案1】:

这是my answer to the same question asked on the Adobe forums的副本:

不要混淆...这是文档中的错误。你可以做 Adob​​e 一个 通过在页面底部发表评论来支持:他们确实监控那些 cmets(它们并不总是做出反应,但会监视它们)。
onSessionStart() 本质上是单线程的 会话范围:每个会话只运行一次(当 会议开始...)。另一方面,有问题的代码 def 想要 像我们一样单线程访问该应用程序范围的变量 不希望两个同时会话为任何给定的单曲击中它 它的价值(如果有意义的话)。

【讨论】:

    【解决方案2】:

    您始终锁定正在写入的 SCOPE。在这种情况下,它将是 APPLICATION。

    【讨论】:

    • 要明确一点:在某些合法情况下,您也希望锁定正在读取的共享范围,但这不是其中一种情况。此外,锁定共享范围的写入并不总是必不可少的。但是,在给定的情况下,您是正确的,因为示例代码中锁定了错误的范围。
    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多