2011-10-12 40 views
7

我發展應該支持客戶端會話持久性小REST服務。正如您所知,由於REST,我們無法在服務器上存儲任何客戶端數據,數據必須存儲在客戶端,並且客戶端的請求必須是自給自足的。那麼...我們如何存儲客戶端會話?通過互聯網搜索,我發現了一些如何實現這一點的方法。例如:我們向客戶端發送包含客戶端ID(nick ...等)的加密標記,如token = AES(id,secretKey);然後我們授權用戶使用祕密密鑰對服務器上的每個請求進行解密令牌。任何人都可以提出建議嗎?也許還有另一種好方法可以做同樣的功能。哪個加密算法會更適合這個?謝謝。會議在REST服務

+0

什麼是你想實現這些持續的客戶端會話?它僅僅是認證過程的性能優化? –

回答

8

你提到:

如你所知,因爲REST的,我們不能存儲 服務器上的任何客戶端的數據,數據必須存儲在客戶端和客戶端的請求必須 自給自足。

REST並沒有說你不能在服務器上存儲客戶端數據;它只是說你不應該在那裏存儲應用程序狀態,你可以認爲它是「這個客戶正在嘗試做什麼」。

如果你主要是想只是有身份驗證的用戶的一個概念,那麼一個標準的登錄cookie會工作得很好,而不是「unRESTful」。

+0

我發現的唯一合乎邏輯的解釋。希望它是正確的 – GorillaApe

2

這一切都歸結到你回答這個問題:你爲什麼需要擺在首位「會話」的概念?

如果您需要確保客戶端通過代表的一組憑據的餅乾,考慮而不是在客戶端將它們作爲HTTPS認證頭與每個請求代替。

如果您需要遵循一些粘性路由規則(以確保客戶端的請求被髮送到特定服務器),請考慮利用此機會擺脫那種架構的緊身衣,因爲它是殺死您的最快方式未來可擴展性的可能性。相反,讓你的服務器選擇任意。

如果你絕對必須到特定節點的路由,儘量要求客戶端傳遞,你可以用它來散列或分片客戶端下了特定的「泳道」足夠的識別數據。例如,您可以根據用戶名分割它們。