【问题标题】:Two different session timeouts两种不同的会话超时
【发布时间】:2015-04-29 20:58:30
【问题描述】:

这行得通吗?

function onRequestStart(myPage) {
    if (condition) {
        this.sessionTimeout = CreateTimeSpan(0, 2, 0, 0)
    } else {
        this.sessionTimeout = CreateTimeSpan(0, 0, 1, 0)
    }
}

如果有人登录,我不想让他们退出,但如果蜘蛛出现,我不希望蜘蛛长时间占用会话存储。

也许我在担心一些我不需要担心的事情。

【问题讨论】:

标签: coldfusion cfml lucee


【解决方案1】:

我以前做过,但在onRequestStart() 中没有。我把它放在 Application.cfc 的伪构造器区域中(即在任何方法定义之前)。为基于标签的语法道歉:

<cfset variables.sessionTimeout = createTimeSpan(0,2,0,0) />
<cfif variables.isBot>
    <cfset variables.sessionTimeout = createTimeSpan(0,0,1,0) />
</cfif>
<cfset this.SessionTimeout = variables.sessionTimeout />

是的,它确实有效。我不知道如果你把它放在onRequestStart() 里面会不会起作用。它可以节省大量内存,尤其是在您的网站被大量机器人攻击时。

【讨论】:

  • 我承认我从未尝试过,但我很好奇 - 这真的是线程安全的吗?我不希望出现错误,但由于它是应用程序级别的设置,如何确保新设置仅影响与当前请求相关的会话,而不影响可能大致同时到达的其他会话?
  • @Leigh,Ben Nadel 在上面的 Miguel-F 链接中解释了这一点。 “您不必担心蜘蛛和用户同时点击 CFApplication 标签。请记住,应用程序并不是真正“运行”的。应用程序只是每个请求与使用特殊关联的一些内存块键(应用程序名称)。因此,每个页面请求并没有真正运行 CFApplication 标签来启动应用程序,每个页面请求实际上只是将自身与 CFApplication 标签中定义的应用程序相关联。实际上,它运行良好并节省了大量内存。
  • 如果用户被识别为机器人,另一种选择是终止 onRequestEnd() 中的当前会话。
  • 有趣。我将不得不深入阅读该链接。我所质疑的是this 在特定上下文中的含义。上面的引用似乎暗示该范围内的设置在与应用程序范围变量相同的意义上不是“共享”的。如果是这样的话,那么是的,我可以看到这不会成为问题。听起来我需要稍后阅读更多内容并尝试一下。
  • 没错,它们与application-scoped变量的共享意义不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2014-08-27
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多