2014-03-27 64 views
1

的情況下,我在CF 9.運行我的應用程序ColdFusion應用程序變量我創建了一個CFC專心我的cookie處理,而不是散落有關的所有變量。很簡單。它有兩個屬性(名稱,值),並有5個方法(setCookie,deleteCookie,verifyCookie,clearAllCookies和init)。鎖定指向一個對象

因爲我想這個方法在整個應用程序可用,我把這個代碼在我的Application.cfc文件的onApplicationStart方法:

application.oCookie = createObject("com.mycookie").init(); 

當我需要設置任何代碼文件我一個cookie只是這樣稱呼它:

application.oCookie.name="testCookieName"; 
application.oCookie.value="testCookieValue"; 
application.oCookie.setCookie(); 

我的問題是:每次我這樣做時,我需要把這個代碼鎖嗎?如果兩個單獨的用戶在同一時刻訪問此代碼的頁面上,我最終是否會設置混合的Cookie值?

回答

5

爲了讓您的oCookie線程安全,它必須是一個單例(沒有狀態),它只作爲<cfcookie>cookie範圍的薄層。

因此,你應該設計自己的com.mycookie,使其接受application.oCookie.setCookie(name, value)代替。並確保您變更範圍內的所有內容,並且不會在mycookievariables範圍內存儲任何內容。

而且我不認爲你需要使用CFLOCK。

如果你還沒有,你可能要結帳WireBox

+0

謝謝你的答案。我沒有意識到通過傳遞參數來調用,而不是修改屬性,然後調用該方法將作爲單個線程運行。這說得通。當我打電話時,它還具有減少所需行數的額外好處! –

+0

是的,當你做'oCookie.X = Y',這是一樣的'com.mycookie'類設置'this.X'。這個CFC實例的本地範圍和變量範圍是本地的。如果只有一個實例,它們將被共享。因此,你只應該依靠'arguments'和'local'作爲輸入範圍,並且只有'variables'範圍內的常量。 「這個範圍實際上只是爲了公共職能,而不是屬性。 – Henry

相關問題