Coldfusion MX技巧精華收集(1)第4/5頁
更新時間:2007年03月15日 00:00:00 作者:
讓客戶端變量逾期
這些方式的其中之一便是客戶端變量(client variable)??蛻舳俗兞亢褪褂谜郀顟B(tài)變量(session variables)類似,不同之處在于使用者狀態(tài)變量是儲存在 ColdFusion 服務(wù)器的內(nèi)存中,而客戶端變量則是儲存在 cookie 里面,Windows 注冊數(shù)據(jù)庫(Windows registry)或者外部的數(shù)據(jù)庫服務(wù)器里面。這項差異乍看之下并不太重要,然而如果你使用一系列 ColdFusion 服務(wù)器搭配組成負載平衡(load-balance)環(huán)境的話,這項差異性就變得非常關(guān)鍵了。
在負載平衡服務(wù)器環(huán)境之下,你永遠無法得知哪一部服務(wù)器會被指定來處理哪一個使用者發(fā)出的請求。負載平衡硬件或者軟件純粹僅是將接收到的使用者請求傳遞給當時負載最輕的服務(wù)器來處理。在這樣的狀況下我們無法正常運用使用者狀態(tài)變量,因為某部服務(wù)器上面儲存的使用者狀態(tài)變量,對于其它服務(wù)器而言都是不可見的。每當負載平衡硬件(或者軟件)將同一個使用者從某部伺服器重新導(dǎo)向到另一部服務(wù)器(亦即:該使用者的某次請求被分配給 A 服務(wù)器來處理,而下一次請求卻被分配給 B 服務(wù)器來處理),使用者狀態(tài)變量便會立刻消失不見。
要解決這個問題的方法之一便是使用客戶端變量,將使用者相關(guān)信息儲存在另一部所有參與負載平衡的服務(wù)器皆可存取得到的外部數(shù)據(jù)庫里面。然而這項作法本身卻又會帶來其它必須考量的問題,特別是如果你要透過客戶端變量來儲存儲存敏感性或者安全性資料的時候。你可以設(shè)定讓客戶端變量在某段時間之后便過期失效,但是這個時間間隔最短只能設(shè)定成一天。如果你儲存的是使用者認證相關(guān)資料,你應(yīng)該會想要讓這段逾期時間設(shè)定成更短,例如十五分鐘。要做到這項短時間逾期功能,你只需要多加一些額外的 CFML 程序代碼。
我建立了另一個稱作 CF_ClientTimeout 的自訂卷標來替你處理這個問題。同樣地,你可以直接在 Allaire 公司的開發(fā)情報交換中心網(wǎng)站上下載使用。這個卷標透過日期與時間相關(guān)函數(shù)來把目前時間與使用者上一次存取某個頁面的時間加以比對,如果兩者的時間差距大于你自己設(shè)定的某個時間長度,那么該使用者的相關(guān)信息便會被視為已經(jīng)逾期并且失去效用。如果你在 applicaiton.cfm 這個檔案里面使用這個卷標,那么這個卷標便會在同一個應(yīng)用程序里面的所有頁面里頭進行這項時間比對工作。相關(guān)的程序代碼如下:
<CFPARAM NAME="CLIENT.CheckLastVisit" DEFAULT="#CreateODBCDateTime(Now())#">
<CFSET Compare = DateCompare(DateAdd("n", (ATTRIBUTES.TimeOut * -1), CreateODBCDateTime(Now())), CLIENT.CheckLastVisit)>
<CFIF Compare IS NOT -1>
<CFSET CALLER.TimedOut = "Yes">
<CFELSE>
<CFSET CALLER.TimedOut = "No">
</CFIF>
<CFSET CLIENT.CheckLastVisit = CreateODBCDateTime(Now())>
如果你輸入 TimeOut 變量的值為 30(TimeOut = 30),那么使用者便會在連續(xù)三十分鐘沒有作任何動作之后,被系統(tǒng)視為已經(jīng)逾期。一旦被系統(tǒng)視為逾期,下一次該使用者試圖再次存取某個頁面的時候,這個自訂卷標便會傳回 TimeOut 變量的值為「Yes」,你可以使用一個 CFIF 敘述來判斷這個變量值,并且將逾期使用者的相關(guān)客戶端變量刪除掉,或者修改某個認證變量的值(例如將 CLIENT.VALIDATED 變量的值設(shè)定成「No」,CLIENT.VALIDATED = "No"),并且接著執(zhí)行一段使用者登入程序。
相關(guān)文章
ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程
ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程...2007-03-03ColdFusionMX 編程指南 ColdFusionMX編程入門
ColdFusionMX 編程指南 ColdFusionMX編程入門...2007-03-03