网站编辑需要长时间登录,并且由于登录依赖于会话范围,因此会话期限目前为10小时。
这使我们在前端表现不佳。我怎样才能最好地将两者分开呢?
我找到了一种让它工作的方法,但我想考虑其他解决方案,如果它不是管理员用户,这会使会话失效。
<cfif NOT StructKeyExists( session, "user" )>
<cfscript>
StructDelete(cookie, 'cfid');
StructDelete(cookie, 'cftoken');
session.setMaxInactiveInterval(1);
</cfscript>
该网站已经很老了,使用了Application.cfm,我尝试添加另一个Application.cfm,其中包括&#39;首先,对于拥有它自己的管理区域,但现在每个应用程序都对创建/使用的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,但这对时间至关重要,并且有一些奇怪的遗留代码,我没有时间进行调试。
答案 0 :(得分: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 :(得分:1)
如果你正在使用框架,欢迎使用这段代码。我的后端左侧有一个框架,可以导航到cms模块(页面,评论等)。
在左侧导航框页面中:
<script type="text/javascript">
setTimeout(function(){
document.location.replace('nav.cfm');
},900000);
</script>
每15分钟导航重新加载一次。这是默认的30分钟会话计时器的一半。因此,当cms后端打开时,会话不会过期。 因为只重新加载左侧导航框,所以内容框架(可能使用打开的文本编辑器)永远不会被覆盖。变化不会丢失。
答案 2 :(得分:1)
最好的方法是将前端和管理员分成两个不同的应用程序。 由于您不想转换为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 ) />