2014-02-12 115 views
3

我一直在爲使用Android本機應用程序開發一個RESTful web服務。我選擇ASP .NET WEB API。 WEB API使得在控制器中創建這些HTTP方法以及將我們的響應對象轉換爲json/xml變得非常容易......它簡直太棒了!其他Web服務和多個客戶端的會話處理

現在來到用戶認證和那些會話處理部分。首先,我認爲在我的RESTful服務中實現會話會更容易。但是真正感到沮喪的是在WEB API中啓用會話的配置,並使得android本機處理這些會話ID。

  1. 首先,機器人發送登錄請求到WEB API
  2. WEB API檢查認證,並用的sessionid響應在響應頭
  3. 現在Android本地讀取響應報頭 - >取指ASPNET_sessionId - >保持在其內存
  4. 從Android的進一步要求將你認爲這是一個正確的方法來設置此ASPNET_sessionId在請求頭

現在我有另一個客戶端。 Mobile jquery中的混合應用程序。現在面臨以下問題:

  • 訪問來源政策:所以我在響應頭設置Access-Control-Allow-Origin*。它解決了。
  • 現在我需要在jquery ajax post請求中設置會話ID。並且發現在調用跨域服務時無法爲jquery ajax設置頭文件。

如何管理混合應用的會話?

此外,創建必須從不同的客戶端應用程序中使用的Web服務時需要注意什麼?

回答

0

經過大量的研究,我得到以下幾點:

REST是無狀態的。那麼爲什麼我們需要玩會話?通過賦予它有狀態的生活?

不需要啓用會話狀態。當用戶登錄到 應用程序時,我們爲數據庫中的用戶創建唯一的ID。進一步的 來自用戶的請求將發送這個唯一的ID作爲消息 正文的一部分。服務器每次檢查此唯一標識以識別用戶。在混合應用

跨域問題

當轉換應用混合動力與科爾多瓦,我們發現,跨域 問題不存在的。據信,cordova將jquery ajax請求轉換爲來自android的本地請求調用。 jsonp也被認爲是一個很好的解決方案。

+1

如果您要爲用戶創建唯一的ID並進行驗證,那麼您將爲每個請求創建一個狀態。僅僅因爲你不使用內置的.net框架來管理狀態並不意味着你是無狀態的。我並不是說你做錯了,而只是語義。你不是無國籍的。你正在做的是模仿.NET框架。這只是.net使用cookie來驗證會話,並在郵件正文中使用唯一的ID。 – dewd