2012-07-03 94 views
3

在經歷了來自不同人員關於Rest支持的應用程序的會話管理的大量意見之後,這裏是我想過的。REST服務應用程序中的會話管理

我的應用程序可以從瀏覽器進行訪問(作爲普通的網絡應用程序)和移動器件。基於瀏覽器的應用程序首先使用服務器中的http會話管理編寫應用程序。現在,在獲得Mobile客戶端的同時,我們已經實施了Rest網絡服務,同樣也爲移動設備和瀏覽器客戶端提供了相同的服務層。

當用戶與移動設備登錄時,我們創建了一個獨特的身份驗證令牌,生成HTTP會話,我們存儲與此令牌ID作爲鍵,在app值映射中的HTTP會話。稍後,我們期望來自移動設備的每個用戶請求均返回此令牌,並使用此令牌從地圖獲取會話並繼續。

有人可以檢查我的方法,並確認它是否正常?

現在,我有一個第二個問題 - 我們正在使用JsonPRequestBuilder從GWT與新澤西州吉斯調用我的後端REST服務。如何在GWT的jsonp調用期間在http頭中發送此令牌?

+1

RESTful Web服務定義的內在部分是無狀態。由服務構成的每個請求都必須包含執行請求所需的所有數據。如果服務器向客戶端提供令牌,則服務器丟失該令牌的鍵/值映射(例如服務停止並重新啓動)該令牌及其以前的狀態可能無效。這並不是說你不能做你想問的問題。我只是覺得你可以稱之爲RESTful。 – JMD

回答

0

對於第二:用JSONP,你有你的令牌添加爲普通HTTP參數,則使用常規的XMLHttpRequest的時候有這樣要求的任何訪問對象。所以你不能設置任何類型的頭文件,所有的東西都應該放在查詢字符串中。

+0

Okey ...非常感謝您 – Santosh

2

「REST中的會話」是一個矛盾。

當用戶使用移動設備登錄,我們正在創造一個獨特的身份驗證令牌

似乎罰款,雖然它看起來有點像你改造的OAuth。

生成一個http會話,我們將http會話與這個令牌ID一起存儲爲app中的key,value map。

保持在服務器端的一些緩存以提高訪問速度是好的,但不要把它叫做會話,並且不要將其綁定到特定令牌(你可以將其綁定到用戶如果數據是用戶特定的;如果有意義的話,用戶ID將僅僅是緩存鍵的一部分)。

你不談論緩存到期,或如何/當你清理和釋放內存。

現在,我有第二個問題 - 我們使用GWT中的JsonPRequestBuilder來調用我的後端REST服務和jersey-guice。如何在GWT的jsonp調用期間在http頭中發送此令牌?

正如@Arcadien說,JSONP是隻是在網頁中插入一個<script>元素,所以你只有URL的控制,因此,這是你應該/可以通過認證令牌(雖然不是真的安全)。
我可以質疑從移動「原生」應用程序使用JSONP的原因嗎? AFAIK沒有來自UIWebViews或類似的SOP問題,所以RequestBuilderXMLHttprequest將Just Work™。

+1

我們正在爲桌面版和移動版客戶端編寫我們的應用程序。後端服務很常見。由於請求來自不同的域,我選擇了JSONP而不是RequestBuilder。 – Santosh

+2

''在REST中的會話「+1是一個矛盾。' – JMD

相關問題