我有一个简单登录的网站。 20分钟后,如果用户处于非活动状态,他的会话将会过期,如果他试图保存他的作品(通常是需要超过20分钟完成的书评),他就会退出并丢失所有内容。 / p>
代码已有六年了,我无法解决这个问题。我当时正在使用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管理员,但我理解这些设置应该覆盖它。我似乎能够覆盖的唯一一次是,如果我将sessiontimeout设置为超过20分钟......如果我告诉它,它很高兴在一分钟内使会话到期。
自从关于ColdFusion 5之后,我就已经完成了任何事情。(我相信主持人现在正在运行9个。),所以如果我的cfc中有一些完全不合适的东西,我就不会这样做。一点儿都很惊讶。感谢。
答案 0 :(得分:2)
根据ColdFusion documentation:&#34;您无法在[Application.cfc或Application.cfm]中设置超过管理员内存变量页面上设置的最大会话超时值的超时值。&#34;
由于您使用的是共享托管,如果您的主机不会增加超时(并且他们可能会赢得),您将不得不重新考虑您的应用流程。
一种可能的解决方法是使用定期的AJAX请求来保持会话处于活动状态。根据按键活动将请求绑定到JavaScript计时器。