2

我有一个具有不同类型用户的应用程序。我需要根据用户类型设置 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 方法中,我编写了一个代码来检查 loginIn 用户类型并相应地设置 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

4 回答 4

1

我不相信有任何方法可以this从以下函数之一中修改范围元数据onApplicationStartonSessionStartonRequestStart. 这意味着您不能设置this.sessionTimeout任何这些方法。

我最近正在研究这个ColdFusion 11:从扩展的 Application.cfc 中的不同功能更改应用程序“this”范围元数据。但是,为 ColdFusion 发出的每个请求都设置了元数据。这意味着您可以尝试 Ben Nadel 在本文中提到的方法,并将设置超时的逻辑移出和移入onRequest()范围this,并尝试创建动态会话超时。

延迟 ColdFusion 会话持久性直到用户登录

不过,您可能必须发挥创造力才能确定当时哪个用户正在登录。(即使稍后发生身份验证......设置超时有什么害处吗?)

于 2018-01-16T13:36:39.913 回答
0

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

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

于 2018-01-16T05:12:22.210 回答
0

我在 railo 中使用过它,但我认为它也适用于冷融合。

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

它基本上将当前正在运行的请求的会话超时值设置为 60 (我不记得是分钟还是秒)

于 2018-01-21T14:07:32.523 回答
0

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

于 2018-01-18T15:13:38.150 回答