欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Coldfusion MX技巧精華收集(1)第4/5頁

 更新時(shí)間:2007年03月15日 00:00:00   作者:  

讓客戶端變量逾期
這些方式的其中之一便是客戶端變量(client variable)。客戶端變量和使用者狀態(tài)變量(session variables)類似,不同之處在于使用者狀態(tài)變量是儲存在 ColdFusion 服務(wù)器的內(nèi)存中,而客戶端變量則是儲存在 cookie 里面,Windows 注冊數(shù)據(jù)庫(Windows registry)或者外部的數(shù)據(jù)庫服務(wù)器里面。這項(xiàng)差異乍看之下并不太重要,然而如果你使用一系列 ColdFusion 服務(wù)器搭配組成負(fù)載平衡(load-balance)環(huán)境的話,這項(xiàng)差異性就變得非常關(guān)鍵了。 

在負(fù)載平衡服務(wù)器環(huán)境之下,你永遠(yuǎn)無法得知哪一部服務(wù)器會(huì)被指定來處理哪一個(gè)使用者發(fā)出的請求。負(fù)載平衡硬件或者軟件純粹僅是將接收到的使用者請求傳遞給當(dāng)時(shí)負(fù)載最輕的服務(wù)器來處理。在這樣的狀況下我們無法正常運(yùn)用使用者狀態(tài)變量,因?yàn)槟巢糠?wù)器上面儲存的使用者狀態(tài)變量,對于其它服務(wù)器而言都是不可見的。每當(dāng)負(fù)載平衡硬件(或者軟件)將同一個(gè)使用者從某部伺服器重新導(dǎo)向到另一部服務(wù)器(亦即:該使用者的某次請求被分配給 A 服務(wù)器來處理,而下一次請求卻被分配給 B 服務(wù)器來處理),使用者狀態(tài)變量便會(huì)立刻消失不見。 

要解決這個(gè)問題的方法之一便是使用客戶端變量,將使用者相關(guān)信息儲存在另一部所有參與負(fù)載平衡的服務(wù)器皆可存取得到的外部數(shù)據(jù)庫里面。然而這項(xiàng)作法本身卻又會(huì)帶來其它必須考量的問題,特別是如果你要透過客戶端變量來儲存儲存敏感性或者安全性資料的時(shí)候。你可以設(shè)定讓客戶端變量在某段時(shí)間之后便過期失效,但是這個(gè)時(shí)間間隔最短只能設(shè)定成一天。如果你儲存的是使用者認(rèn)證相關(guān)資料,你應(yīng)該會(huì)想要讓這段逾期時(shí)間設(shè)定成更短,例如十五分鐘。要做到這項(xiàng)短時(shí)間逾期功能,你只需要多加一些額外的 CFML 程序代碼。 

我建立了另一個(gè)稱作 CF_ClientTimeout 的自訂卷標(biāo)來替你處理這個(gè)問題。同樣地,你可以直接在 Allaire 公司的開發(fā)情報(bào)交換中心網(wǎng)站上下載使用。這個(gè)卷標(biāo)透過日期與時(shí)間相關(guān)函數(shù)來把目前時(shí)間與使用者上一次存取某個(gè)頁面的時(shí)間加以比對,如果兩者的時(shí)間差距大于你自己設(shè)定的某個(gè)時(shí)間長度,那么該使用者的相關(guān)信息便會(huì)被視為已經(jīng)逾期并且失去效用。如果你在 applicaiton.cfm 這個(gè)檔案里面使用這個(gè)卷標(biāo),那么這個(gè)卷標(biāo)便會(huì)在同一個(gè)應(yīng)用程序里面的所有頁面里頭進(jìn)行這項(xiàng)時(shí)間比對工作。相關(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),那么使用者便會(huì)在連續(xù)三十分鐘沒有作任何動(dòng)作之后,被系統(tǒng)視為已經(jīng)逾期。一旦被系統(tǒng)視為逾期,下一次該使用者試圖再次存取某個(gè)頁面的時(shí)候,這個(gè)自訂卷標(biāo)便會(huì)傳回 TimeOut 變量的值為「Yes」,你可以使用一個(gè) CFIF 敘述來判斷這個(gè)變量值,并且將逾期使用者的相關(guān)客戶端變量刪除掉,或者修改某個(gè)認(rèn)證變量的值(例如將 CLIENT.VALIDATED 變量的值設(shè)定成「No」,CLIENT.VALIDATED = "No"),并且接著執(zhí)行一段使用者登入程序。

相關(guān)文章

最新評論