2012-07-09 41 views
6

我想確定如何使用Delphi REST DataSnap服務器檢索會話信息。德爾福XE2 Datasnap會話管理 - 頁面重新加載後獲取會話信息

我知道,在同一個客戶端頁面上,您可以使用TDSSession方法GetThreadSession訪問當前線程會話。

然而,我想要做的是將數據存儲在會話中(putData),並且當用戶從page1移動到page2時仍然能夠檢索它。目前,如果用戶移動到不同的頁面,則會話將丟失並創建新的會話,從而丟失之前設置的會話中的數據。

我試着玩TDSSessionManager.SetThreadSession(sessionid) - 但我似乎無法得到它的工作。

我回顧了廣受好評的Marco Cantu白皮書,但是,它沒有提供解決此問題的方法。

任何幫助我可以得到這個將是偉大的 - 即使它只是'嘿,這個話題是在書X'。

謝謝!

回答

0

我相信你需要做的是將TDSServerClass實例的屬性LifeCycle設置爲Session(有狀態)。從你的問題看來,你目前正在使用Invocation(無狀態)。

+0

道歉 - 這將是最初提供的有用信息。 TDSServerClass確實將其LifeCycle屬性當前設置爲Session。 – ConBran 2012-07-09 13:51:23

+0

我認爲如果HTTP 1.1 KeepAlive連接有效,這應該是開箱即用的。 – 2012-07-09 13:58:16

+1

開箱即用,REST應用程序使用TIdHTTPWebBrokerBridge作爲服務器。默認情況下,KeepAlive屬性爲'false',因此,根據您的建議,當服務器啓動時,我將KeepAlive屬性設置爲'true',但是,問題仍然存在。 – ConBran 2012-07-09 15:19:25

1

TDSSessionManager.SetThreadSession(sessionid)適用於Session.sessionname。

另外確保您的生命週期設置爲會話(如tondrej所述)。

如果您重新連接您的客戶端。一個新的會話開始。所以你想保持你的Datasnap連接打開。

或者您可以將生命週期設置爲Server和Mannage客戶端會話。

編輯:Rest服務器無狀態。因此,您需要將您所在的頁面存儲在客戶端上。並從服務器查詢所需的頁面

1

您必須調整客戶端JavaScript以使用cookie來存儲會話信息。

JavaScript Client Sessions

的最後一部分。如果你想保持與服務器端對象活躍的會話使用Session的生命週期。

+0

要記住頁面加載之間的會話ID,您需要啓用會話cookie。例如,要調用: initSessionData(true,「chat_」); – 2015-12-08 00:25:22