2012-04-26 71 views
2

我正在構建一個帶有後端和前端的web應用程序,後端構建在scala中,前端構建在html,css,jquery(backbone.js,jquery.js,underscore.js)中。Rest api會話

如何創建登錄名?所以基本上你可以看到前端是一個應用程序,我們只向其他後端發出json請求。

感謝您的幫助。

回答

8

斯卡拉與否,JSON與否,XHR與否的機制仍然相同。您發送登錄名和密碼到服務器(salt-hash客戶端的密碼以使其更安全),服務器對其進行身份驗證(檢查登錄名和密碼是否與db中的匹配),然後爲用戶創建會話(在數據庫或內存中 - 取決於您的需要)並將會話ID作爲cookie發送給用戶(AJAX請求/響應應該可以正確使用cookie)。

現在,在您檢查會話cookie的每個請求上,並驗證它是否指向有效用戶(即指向任何內容)。註銷與使用給定ID刪除會話條目一樣簡單。應該首先創建ID:它很長(儘量減少會話劫持的威脅);其次:它包含編碼的日期(以便您可以清除過期的會話)。

這就是所謂的Form-based Authentication

//編輯

讓我回答評論的問題。會議如何工作?

服務器創建會話。會話不是別的,那麼數據庫中的表有2列:ID和值(在這裏,你將持有以JSON編碼的會話數據,並在必要時壓縮,例如你想從eShop購買的東西)。當客戶端通過身份驗證時,服務器通過cookie向用戶發送會話ID。因此,服務器必須將以下標題添加到響應中:

Set-Cookie: session=ID32445235423tdwfnmm; Expires=Wed, 09 Jun 2012 10:18:14 GMT 

現在瀏覽器理解此標頭併爲客戶端設置cookie。從這個角度,只要您撥打一個請求的瀏覽器會自動添加餅乾的要求,所以從現在開始,每個請求將具有以下標題

Cookie: session=ID32445235423tdwfnmm; other_cookie:other_value; 

除非日期是Wed, 09 Jun 2012 10:18:14 GMT後。如果是這種情況,那麼我們的會話cookie將被忽略(請注意,這與在服務器端銷燬必須手動處理的會話不同)。

現在,您必須解碼服務器端的Cookie標題並檢索標識。此時使用某種框架是一個好主意,因爲在每個請求中編寫解碼代碼是一種不好的做法。你應該在這裏使用所謂的中間件。現在,這個中間件檢索ID,檢查數據庫的會話,並將結果(即用戶被認證或不認證)存儲在請求對象中,以便稍後使用(即在最終的請求處理程序中)。

因此,你可以看到你根本不使用JavaScript。

此外,您在登錄請求上設置了Cookie 只有(儘管您可以在每個請求上設置它來減少會話劫持問題 - 但這更加複雜)。存儲ID是瀏覽器的工作。在服務器端,您只檢查Cookie標題是否包含session鍵。

+0

很好的回答,非常感謝併爲我的初學者問題感到抱歉。當我構建移動應用程序時,基本上他們也會存儲Cookie? – onlineracoon 2012-04-26 10:41:07

+0

@ user1328997沒問題。我不確定手機(從來沒有與他們合作),但我相信他們這樣做。 – freakish 2012-04-26 10:42:11

+0

Aight。還有一件事,驗證之後,服務器創建會話,向客戶端返回一個會話id(以json的形式),javascript創建cookie,之後會發生什麼?隨着每個請求我發送會話ID? – onlineracoon 2012-04-26 10:58:45