2016-09-23 34 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後端打開時過期。 由於只有左側導航框架正在重新加載,所以內容框架(可能帶有開放式文本編輯器)永遠不會被覆蓋。變化不會丟失。