SessionTimeout 没有覆盖 CF 管理员
SessionTimeout not overrriding CF Administrator
我有一个只需简单登录的网站。 20 分钟后,如果用户一直处于非活动状态,他的会话就会过期,如果他试图保存他的工作(通常是一篇需要超过 20 分钟才能完成的书评),他就会注销并丢失所有内容。
代码已有 6 年历史,我一直无法解决这个问题。我当时用的是application.cfm,现在换成了application.cfc:
<cfcomponent>
<!--- Set up the application. --->
<cfset THIS.Name = "SCR" />
<cfset THIS.ApplicationTimeout = CreateTimeSpan( 0, 12, 0, 0 ) />
<cfset THIS.SessionManagement = true />
<cfset THIS.SessionTimeout = CreateTimeSpan( 0, 3, 0, 0 ) />
<cfset THIS.SetClientCookies = false />
<cffunction name="onRequestStart">
<cfargument name="requesturi" required="true"/>
</cffunction>
我的登录代码是这样设置用户信息的:
<cfif getLoginUser.recordcount eq 1>
<cfset session.user_id=getLoginUser.user_id>
<cfif getLoginUser.user_level_id eq 1>
<cfset session.user_type=1>
<cfelseif getLoginUser.user_level_id eq 2>
<cfset session.user_type=2>
<cfelseif getLoginUser.user_level_id eq 3>
<cfset session.user_type=3>
</cfif>
<cfset session.user_name='#name#'>
<cfif not isdefined('session.redirect_url')>
<cflocation url="my_account.cfm">
<cfelse>
<cflocation url="#session.redirect_url#">
</cfif>
</cfif>
查看 cfApplicationSettings 的输出可确认这些设置,但 20 分钟的超时继续无误。我在共享主机上无法访问 CF 管理员,但我的理解是这些设置应该覆盖它。我似乎唯一能够覆盖的时间是如果我将会话超时设置为少于 20 分钟......如果我告诉它,它很高兴在一分钟内使会话过期。
自从 ColdFusion 5 以来,我对任何事情都有点不知所措。(我相信主机现在是 运行 9。),所以如果我的 cfc 中有一些完全无能的东西,我不会完全惊讶。
谢谢。
根据 ColdFusion documentation: "您不能 [在 Application.cfc 或 Application.cfm] 中设置大于在管理员内存变量页面。”
由于您使用的是共享主机,如果您的主机不会增加超时(他们可能不会),您将不得不重新考虑您的应用程序流程。
一种可能的解决方法是使用周期性 AJAX 请求使会话保持活动状态。根据按键 activity 将请求绑定到 JavaScript 计时器。
我有一个只需简单登录的网站。 20 分钟后,如果用户一直处于非活动状态,他的会话就会过期,如果他试图保存他的工作(通常是一篇需要超过 20 分钟才能完成的书评),他就会注销并丢失所有内容。
代码已有 6 年历史,我一直无法解决这个问题。我当时用的是application.cfm,现在换成了application.cfc:
<cfcomponent>
<!--- Set up the application. --->
<cfset THIS.Name = "SCR" />
<cfset THIS.ApplicationTimeout = CreateTimeSpan( 0, 12, 0, 0 ) />
<cfset THIS.SessionManagement = true />
<cfset THIS.SessionTimeout = CreateTimeSpan( 0, 3, 0, 0 ) />
<cfset THIS.SetClientCookies = false />
<cffunction name="onRequestStart">
<cfargument name="requesturi" required="true"/>
</cffunction>
我的登录代码是这样设置用户信息的:
<cfif getLoginUser.recordcount eq 1>
<cfset session.user_id=getLoginUser.user_id>
<cfif getLoginUser.user_level_id eq 1>
<cfset session.user_type=1>
<cfelseif getLoginUser.user_level_id eq 2>
<cfset session.user_type=2>
<cfelseif getLoginUser.user_level_id eq 3>
<cfset session.user_type=3>
</cfif>
<cfset session.user_name='#name#'>
<cfif not isdefined('session.redirect_url')>
<cflocation url="my_account.cfm">
<cfelse>
<cflocation url="#session.redirect_url#">
</cfif>
</cfif>
查看 cfApplicationSettings 的输出可确认这些设置,但 20 分钟的超时继续无误。我在共享主机上无法访问 CF 管理员,但我的理解是这些设置应该覆盖它。我似乎唯一能够覆盖的时间是如果我将会话超时设置为少于 20 分钟......如果我告诉它,它很高兴在一分钟内使会话过期。
自从 ColdFusion 5 以来,我对任何事情都有点不知所措。(我相信主机现在是 运行 9。),所以如果我的 cfc 中有一些完全无能的东西,我不会完全惊讶。
谢谢。
根据 ColdFusion documentation: "您不能 [在 Application.cfc 或 Application.cfm] 中设置大于在管理员内存变量页面。”
由于您使用的是共享主机,如果您的主机不会增加超时(他们可能不会),您将不得不重新考虑您的应用程序流程。
一种可能的解决方法是使用周期性 AJAX 请求使会话保持活动状态。根据按键 activity 将请求绑定到 JavaScript 计时器。