Coldfusion 不同的会话超时长度
Coldfusion different Session timeout lengths
网站编辑需要较长的登录时间,由于登录依赖会话范围,目前会话周期为10小时。
这使我们在前端的性能很差。我怎样才能最好地将两者分开?
我找到了一种让它工作的方法,但我想考虑其他解决方案,如果它不是管理员用户,这将使会话过期。
<cfif NOT StructKeyExists( session, "user" )>
<cfscript>
StructDelete(cookie, 'cfid');
StructDelete(cookie, 'cftoken');
session.setMaxInactiveInterval(1);
</cfscript>
该网站很旧并使用 Application.cfm,我尝试添加另一个 Application.cfm,第一个 'includes',用于管理区域,但现在每个应用程序都有对要 create/use.
的 cookie 感到困惑
我看过
等资源
https://misterdai.wordpress.com/2010/06/15/cf-sessionstop-ending-a-cf-session/
和
http://www.bennadel.com/blog/1847-explicitly-ending-a-coldfusion-session.htm
我什至考虑过转换为 Application.cfc,但这是时间紧迫的,而且其中有一些古怪的遗留代码,我没有时间调试。
我们有一些页面,用户必须花费大量时间进行编辑,这有可能导致他们的会话超时。在这些特定页面上,我们通过包含另一个位于非常小的 iframe 中的页面来保持会话活动。此页面以指定的时间间隔进行元刷新。
我们通过编写两个文件使它可以重用。第一个 PreventTimeout.cfm 被这样调用:
<cfinclude template="path goes here/PreventTimeout.cfml">
它有这个代码:
<cfparam name="RefreshMinutes" default="15" type="integer">
<cfset RefreshSeconds = RefreshMinutes * 60>
<cfoutput>
<iframe height="1" width="1"
src="path goes here /PreventTimeoutIFrameContents.cfm?
RefreshSeconds=#RefreshSeconds#">
</iframe>
</cfoutput>
PreventTimeoutIFrameContents.cfm 有元刷新代码。
如果您使用的是框架,欢迎使用这段代码。我在后端左侧有一个框架,可以导航到 cms 模块(页面、评论等)。
在左侧导航框架页面中:
<script type="text/javascript">
setTimeout(function(){
document.location.replace('nav.cfm');
},900000);
</script>
导航每 15 分钟重新加载一次。这是默认 30 分钟会话计时器的一半。因此,当 cms 后端打开时,会话不会过期。
因为只有左侧导航框架被重新加载,内容框架(可能带有打开的文本编辑器)永远不会被覆盖。更改不会丢失。
最好的方法是将前端和管理分离为两个不同的应用程序。
由于您不想转换为 Application.cfc(下面的解决方案),您可以在 Application.cfm
中进行
<cfapplication name="ApplicationName"
sessionmanagement="Yes"
sessiontimeout="#CreateTimeSpan('0','4','0','0')#">
对于Application.cfc
<cfset this.sessionManagement = true />
<cfset this.sessionTimeout = createTimeSpan( 0, 0, 5, 0 ) />
网站编辑需要较长的登录时间,由于登录依赖会话范围,目前会话周期为10小时。
这使我们在前端的性能很差。我怎样才能最好地将两者分开?
我找到了一种让它工作的方法,但我想考虑其他解决方案,如果它不是管理员用户,这将使会话过期。
<cfif NOT StructKeyExists( session, "user" )>
<cfscript>
StructDelete(cookie, 'cfid');
StructDelete(cookie, 'cftoken');
session.setMaxInactiveInterval(1);
</cfscript>
该网站很旧并使用 Application.cfm,我尝试添加另一个 Application.cfm,第一个 'includes',用于管理区域,但现在每个应用程序都有对要 create/use.
的 cookie 感到困惑我看过
等资源https://misterdai.wordpress.com/2010/06/15/cf-sessionstop-ending-a-cf-session/
和
http://www.bennadel.com/blog/1847-explicitly-ending-a-coldfusion-session.htm
我什至考虑过转换为 Application.cfc,但这是时间紧迫的,而且其中有一些古怪的遗留代码,我没有时间调试。
我们有一些页面,用户必须花费大量时间进行编辑,这有可能导致他们的会话超时。在这些特定页面上,我们通过包含另一个位于非常小的 iframe 中的页面来保持会话活动。此页面以指定的时间间隔进行元刷新。
我们通过编写两个文件使它可以重用。第一个 PreventTimeout.cfm 被这样调用:
<cfinclude template="path goes here/PreventTimeout.cfml">
它有这个代码:
<cfparam name="RefreshMinutes" default="15" type="integer">
<cfset RefreshSeconds = RefreshMinutes * 60>
<cfoutput>
<iframe height="1" width="1"
src="path goes here /PreventTimeoutIFrameContents.cfm?
RefreshSeconds=#RefreshSeconds#">
</iframe>
</cfoutput>
PreventTimeoutIFrameContents.cfm 有元刷新代码。
如果您使用的是框架,欢迎使用这段代码。我在后端左侧有一个框架,可以导航到 cms 模块(页面、评论等)。
在左侧导航框架页面中:
<script type="text/javascript">
setTimeout(function(){
document.location.replace('nav.cfm');
},900000);
</script>
导航每 15 分钟重新加载一次。这是默认 30 分钟会话计时器的一半。因此,当 cms 后端打开时,会话不会过期。 因为只有左侧导航框架被重新加载,内容框架(可能带有打开的文本编辑器)永远不会被覆盖。更改不会丢失。
最好的方法是将前端和管理分离为两个不同的应用程序。 由于您不想转换为 Application.cfc(下面的解决方案),您可以在 Application.cfm
中进行<cfapplication name="ApplicationName"
sessionmanagement="Yes"
sessiontimeout="#CreateTimeSpan('0','4','0','0')#">
对于Application.cfc
<cfset this.sessionManagement = true />
<cfset this.sessionTimeout = createTimeSpan( 0, 0, 5, 0 ) />