2016-02-24 72 views
0

我試圖瞭解用戶如何保持登錄(我試圖在沒有框架的節點上實現此功能,以進行學習)。只是一對夫婦的基於問題是什麼我想我明白:試圖瞭解登錄系統和會話

(1)當用戶嘗試登錄,它發送一個HTTP請求主體的用戶名和密碼

(2)當數據到達服務器,它檢查所需的一切,如果用戶存在,如果密碼正確

然後,我想,我的問題:用戶如何保持登錄?第三步是這樣的:

(3)服務器創建所有需要的會話數據,加密併發送給客戶端?

(4)客戶機存儲在localStorage的經加密的數據

(5)的憑據sended每個請求給服務器,並且服務器將其解密和前處理每個用戶的檢查它行動。

這就是我所理解的。但我覺得這非常引人入勝。我覺得我錯過了很多...在客戶端存儲數據似乎(至少對我來說)並不安全。會話數據是否應存儲在服務器端?以及如何安全地發送用戶名和密碼?它必須加密客戶端?這是安全的嗎?我想即時尋找一些模式,或者我不知道。我感到失落。

是的,抱歉,我的英語不好,知識欠佳。我不是要求代碼,我也歡迎任何提示(喜歡什麼就在谷歌搜索,或有趣的博客):)

謝謝,Y聯合國abrazo :)

---編輯--- 好了,終於我創辦了一些有用的鏈接,解決了我的疑惑的很大一部分:)

[http://stackoverflow.com/questions/6922145/what-is-the-difference-between-server-side-cookie-and-client-side-cookie][1] 
[http://blog.codinghorror.com/protecting-your-cookies-httponly/][2] 
[http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf][3] 
[https://es.wikipedia.org/wiki/Cookie_(inform%C3%A1tica)][4] 
[https://newspaint.wordpress.com/2015/09/06/how-to-get-cookies-from-node-js-http-response/][5] 
+0

實質上,數據存儲在服務器,數據庫如mysql,mongo或dynamo中。它由一個密鑰訪問,該密鑰在用戶會話中的cookie中啓動。 express中的中間件檢查cookie是否存在,檢索密鑰並從數據存儲中檢索數據。這使您可以在對應用程序的調用中保持完整的會話,並且還允許客戶端在負載平衡的情況下工作,在這種情況下,它們可能不總是在同一個節點服務器上。 – CargoMeister

回答

2

1和2是正確的。

會話通常使用cookie而不是客戶端本地存儲來實現,因爲cookie會隨每個請求自動發送到服務器。該cookie通常只包含一個隨機生成的長ID,該ID是指存儲在服務器端的數據,例如,在數據庫中。這些數據將識別用戶並可能存儲其他會話級別的設置。

也可以使用一個帶有的cookie來簽名(也可能是加密的)用戶信息 - 例如ASP.NET默認會這樣做。這有利於會話不需要存儲。缺點是會話不容易從服務器端銷燬。所以例如向用戶顯示其當前活動會話(來自其他設備)並允許他們註銷的功能無法實現。

通過互聯網發送用戶名和密碼最好通過HTTPS安全地完成。不要在客戶端實現自己的加密。它可能無法正常工作,如果連接未正確加密和驗證,則cookie本身可能會被盜取。

+0

因此,cookies就像存儲在客戶端中的一段數據,它有類似於服務器確定的值。服務器使用密鑰存儲cookie「value」,並且每次請求客戶端都必須發送它的「cookie密鑰」? 我會看看HTTPS。謝謝:) –

+1

@EmilioGrisolía:cookie是服務器給客戶端的一個鍵值對,比如「sessionid = af8ec260」(在實踐中明顯更長)。您可以將任何合理的小數據存儲在cookie中,並始終將其發送到服務器。但是,數據不能像任何客戶端輸入不可信那樣可信,因此實際上人們通常只發送會話ID並存儲您可能不希望人們在服務器端篡改的實際數據。 –

+0

嘿,謝謝:)我只是用有用的鏈接編輯我的帖子。我一直在環顧四周,最後我明白它是如何工作的:)再次感謝:) –