2012-07-31 41 views
2

比方說,我有一個域名爲sub.domain.com,登錄表單爲https://sub.domain.com/login.cfm如何在同一個域下的服務器上的多個ColdFusion應用程序之間共享SESSION?

在根目錄下,我的應用程序中使用THIS.Name = "MyApp";它的名字我的Application.cfc。

我在這個網站上有幾個子目錄,我想作爲單獨的應用程序運行,它們有自己的Application.cfc,它擴展了根Application.cfc,但每個子目錄都有它自己的名稱,以便我可以創建應用程序-Scope唯一變量到該應用程序:

例如:sub.domain.com/site1/Application.cfc

sub.domain.com/Application.cfc(使用代理CFC)延伸 THIS.Name = "MyApp_Site1";

並設置特定於應用程序的某些應用程序範圍變量。

但是,當他們在https://sub.domain.com/login.cfm登錄中,任何會話範圍變量設置有依賴於應用程序的名稱「MyApp的」。

我可以使用什麼樣的解決方案,以接受在根目錄下的應用有效的登錄,然後將用戶轉發到他們的應用程序,同時搭載在其特定用戶的屬性?

回答

1

ColdFusion中的會話與特定的應用程序綁定在一起。您不能在使用ColdFusion中的會話結構的應用程序之間共享它們。 (想象一下,如果您可以從同一臺服務器上的任何應用程序中獲取會話信息,那麼您將在共享主機上獲得安全性噩夢。)

當成功記錄日誌時,您需要將會話信息存儲在數據庫或其他持久性機制中插入到應用程序的根目錄中,然後將第一個請求中的客戶會話信息加載到特定於站點的應用程序。你可以在你站點特定的應用程序的application.cfc中的onSessionStart()中,甚至在onRequestStart()中做到這一點。

3

簡單的答案是你不能。但讓我解釋一下,因爲這也不完全正確。首先,會話與應用程序名稱相關聯。所以,如果你有兩個application.cfc文件都具有相同的應用程序名稱,那麼這兩個會話都可用。但是,這不是你在做什麼。由於每個名稱都有不同的名稱,因此每個新會話都會有新的應用程序範圍。

你可能想嘗試用FW \ 1和副應用是什麼。這給你一個主要的app.cfc,但允許你將功能分解成不同的組。

您也可以從登錄頁面設置域級cookie。然後,您可以在其他應用程序中使用它們來盲目創建會話。

3

正如@戴夫弗格森提到的,最簡單的方法,最coldfusiony方式共享會話數據是保持它作爲一個單一的應用程序。只要名稱相同,您甚至可以將內容放在不同的文件夾中。

你並不需要使用一個框架像FW \ 1或類似的東西,讓你在找什麼,雖然他們可能使它更容易一點。您始終可以將結構存儲在應用程序範圍內,其中鍵是子應用程序名稱。例如,application.myvariable可能是應用程序[請求。subappname] .myvariable。這使您可以使用一個應用程序,但應用程序變量的作用域是各種子應用程序。你也可以對你的會話變量做同樣的事情。

@Brian提到的另一種方法是使用中間商店。然後,您可以使用任何您想要的密鑰來存儲會話數據。正如@Dave Ferguson提到的,將您的CFID和CFTOKEN設置爲域cookie(特別是CF10在setting up the cookies中有一些改進)。這樣,相同的CFID和CFTOKEN將用於各種應用程序。他們仍然有不同的會話,但使用相同的會話標識符。然後,您可以將該組合用作中間商店中數據的關鍵字。

數據庫是傳統的方法,但根據您的應用程序,這可能會導致併發和鎖定問題,序列化/反序列化問題或性能,然後總是處理清除舊的/過期的數據。所以你可能想看看ehcachememcached來處理這個問題。

特別是ehcache是​​一個有吸引力的選擇,因爲它與ColdFusion 9+捆綁在一起,可以同時使用內存和磁盤,具體取決於您的設置,緩存中的數據可以在服務重啓(或重啓)後存活下來,可以設置爲在一定數量的不活動之後自動使記錄失效。是的,它可以是used for custom caches

我建議你小心,如果你採取這種做法。您需要權衡每次(比如onRequestStart)從緩存中獲取數據的性能指標與通過獲取onSessionStart()中的數據並在多個應用程序中保存重複數據直到會話超時之間的內存消耗。你走的路線將完全取決於你的應用程序的性能特徵,會話數據的大小等。

+0

+1有關使用APPLICATION [REQUEST.subappname]的想法+1 - 可能實現我在尋找的內容。 – 2012-08-01 11:35:52

+0

使用Ehcache的+1。這是一個出色的,非常容易使用的Adobe CF9 +,並且可用於Railo。 Railo和OpenBD也支持memcached開箱即用。 – Brian 2012-08-01 13:24:35

相關問題