2016-09-23 35 views
0

网站编辑希望长时间登录,并且由于登录依赖于会话范围,因此会话周期目前为10小时。Coldfusion不同会话超时长度

这给我们前端的糟糕表现。我怎样才能最好地分开这两个?

我找到了一种方法让它工作,但想要考虑替代解决方案,如果它不是管理员用户,会使会话过期。

<cfif NOT StructKeyExists(session, "user")> 
<cfscript> 
    StructDelete(cookie, 'cfid'); 
    StructDelete(cookie, 'cftoken'); 
    session.setMaxInactiveInterval(1); 
</cfscript> 

该网站是很老,并使用Application.cfm,我曾尝试加入另一个Application.cfm,其中“包括”第一,用它自己的行政区域,但现在每个应用程序获得困惑于创建/使用的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,但这是一次关键的,有一些古怪的遗产那里的代码我没有时间去调试。

回答

1

最好的办法是将前端和管理员分开为两个不同的应用程序。 由于您不想转换为Application.cfc(解决方案波纹管),因此您可以在应用程序中执行此操作。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) /> 
+0

由于使用相同的应用程序变量需要两个应用程序,我搬到那些新的文件application_variables.cfm - 然后我包括这两者。当我包含已定义的应用程序文件时,它引起了一些冲突。 –

+0

由于超时只为应用程序设置了一次,您可以在管理员登录到后端时重置它(增加)吗?那么你不会有两个会话的开销,并且不必管理两个application.c **文件。 – Jules

1

我们有一些页面,用户不得不花费大量的时间进行编辑,这有可能导致会话超时。在这些特定页面上,我们通过包含非常小的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有元刷新代码。

1

如果您使用框架,欢迎您访问这段代码。我有一个框架在后端的左侧,有导航到cms模块(页面,评论等)。

enter image description here

在这种左侧导航栏架页:

<script type="text/javascript"> 
    setTimeout(function(){ 
     document.location.replace('nav.cfm'); 
    },900000); 
</script> 

每隔15分钟导航重载。这是默认30分钟会话计时器的一半。因此,会话不会在cms后端打开时过期。 由于只有左侧导航框架正在重新加载,所以内容框架(可能带有开放式文本编辑器)永远不会被覆盖。变化不会丢失。