在Coldfusion中使用多个SessionTimeout

时间:2018-01-16 05:05:16

标签: coldfusion session-variables application.cfc coldfusion-2016 fw1

我有一个具有不同类型用户的应用程序。我需要根据用户类型设置sessionTimeout。例如管理员30分钟,用户10分钟。为此,我在application.cfc中提供了30分钟的默认sessionTimeout

<cfcomponent output="false" extends="org.corfield.framework">   
    <cfset this.applicationTimeout = createTimeSpan(1,0,0,0) />
    <cfset this.sessionManagement = true />
    <cfset this.sessionTimeout = createTimeSpan(0,0,30,0) />
    .............
    ............

</cfcomponent>

当我转储应用程序变量时,我可以看到sessionTimeout是600,这是正确的。现在在onRequestStart方法中,我编写了一个代码来检查loggedIn用户类型并相应地设置sessionTimeout。

<cfif StructKeyExists(session,"user") AND ListLast(CGI.HTTP_REFERER,"/") EQ "login.cfm" >
    <cfif session.user.userType EQ "GSA">
        <cfset this.sessionTimeout = createTimeSpan(0,0,10,0) />
    </cfif>
</cfif>

在我转储应用程序变量之后,sessionTimeout以天为单位显示,而不是以秒为单位。会议在10分钟后也没有结束。 有人可以帮忙吗?如何在应用程序中实现两个不同的sessionTimeout?另外,为什么一旦我再次设置sessionTimeout,它会在几天而不是几秒内显示sessionTimeout?

4 个答案:

答案 0 :(得分:1)

我不相信有任何方法可以从其中一个功能中修改this范围元数据:onApplicationStartonSessionStartonRequestStart。这意味着你不能在任何这些方法中设置this.sessionTimeout

我最近正在研究这个ColdFusion 11: Changing Application "this" Scope metadata from different functions in extended Application.cfc。但是,为ColdFusion的每个请求设置元数据。这意味着您可以尝试Ben Nadel在本文中提到的方法,并将用于设置超时的逻辑移出onRequest()并移至this范围,并尝试创建动态会话超时。

Delaying ColdFusion Session Persistence Until User Logs In

尽管如此,您可能必须在确定哪个用户正在登录时发挥创意。 (即使以后进行身份验证......设置超时有什么害处吗?)

答案 1 :(得分:0)

会话超时对所有用户都很常见。当第一个请求到来时,超时持续时间在应用程序范围内设置。

我认为简短的回答是,你不能设置两个不同的会话超时持续时间。

答案 2 :(得分:0)

您可以使用以下方法。它有点创建自己的会话管理客户端,但它允许每个用户角色的自定义会话超时。 在会话范围中创建一个时间戳,该时间戳最初设置为用户登录到您的应用的当前时间。在您的应用程序的客户端JavaScript中,创建一个每分钟调用一次函数的计时器,然后调用服务器端函数,以查看自该用户上次记录的时间戳以来经过了多长时间。如果经过的时间达到该用户角色允许的最大值,请使用JavaScript函数注销用户  使用此方法,您可以在每次用户与应用程序“交互”(运行脚本,调用cfc库函数等)时重置时间戳,以便用户在主动使用应用程序时不会注销。用户只能在您定义的“x”分钟不活动后注销,而您在服务器端调用的功能可以进一步定义每个用户角色的数量。

答案 3 :(得分:0)

我在铁路上使用过这个,但我认为它也适用于冷敷。

getPageContext().getSession().setMaxInactiveInterval(javaCast("int", 60));

它基本上将当前正在运行的请求的会话超时值设置为60(我无法记住它是否在几分钟或几秒内)