2013-05-02 149 views
5

我想了解在客戶端檢查登錄狀態的最佳做法是什麼。我想要做的是檢查用戶的登錄狀態,以及他是否未使用JavaScript登錄打開的彈出框(登錄框)。在客戶端檢查登錄狀態

我能想到的2個選項

  1. 做一個AJAX調用服務器並登錄狀態。
  2. 在您的HTML頁面中有一個變量,並在客戶端用 JavaScript檢查此變量。當然我不相信這個檢查,我 仍然在我的控制器在服務器 方有所有必要的檢查。

選項1雖然不錯,但會增加一些延遲/延遲,因此它可能不是用戶體驗方面的最佳選項。或者我錯了,有一個好的服務器(我打算使用亞馬遜網絡服務),這個延遲將會如此之小,用戶也不會理解它(問題可能看起來很愚蠢,但這是我的第一個web開發,所以請理解:))

我看不到任何選項2的問題,請糾正我,如果我錯了。正如我所說,我正試圖理解最佳做法。

+0

你問什麼問題太寬泛無法回答,但我仍然試圖盡我所能。祝您好運...您也可以接受答案... – 2013-06-07 06:16:34

回答

0

選項1似乎是最好的,你怎麼知道你保存用戶ID的cookie是不是調和? 據我所知,最好的做法是給cookie添加一個散列(你可以看到google在cookie中做這件事),然後用它來檢查cookie中的數據是否在服務器端有效,使用祕密和或鹽。

http://en.wikipedia.org/wiki/Hash_function

http://en.wikipedia.org/wiki/Salt_(cryptography)

你能做些什麼呢,雖然是檢查是否一個cookie與用戶ID在客戶端的JavaScript存在,如果沒有,則向用戶發送到登錄頁面。

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

這樣你就不需要在服務器往返於明顯註銷用戶。

但是,您能不能第一次請求用戶對您的服務做出檢查?如果用戶沒有登錄迴應登錄頁面?

+0

Stefan我不打算使用cookie 。我將在頁面中顯示一個變量(顯示登錄狀態),然後使用javascript檢查此變量。我認爲這種方法不會有問題。因爲即使由於某種原因(超時/某些意圖不好的用戶/ ...)客戶端和服務器之間(根據登錄狀態)不匹配,因爲我在服務器端爲所有控制器進行身份驗證/授權,此用戶登錄頁面。至少這是我認爲的:)。 – 2013-05-02 08:47:28

1

避免服務器命中/網絡延遲的最佳方法;您可以放置​​一個具有登錄狀態的客戶端變量(如您在問題中所述),但主要是避免服務器命中和網絡延遲(AJAX),您只需使用與服務器端相同的邏輯來設置登錄狀態爲假。假設在5分鐘的不活動狀態下,邏輯是將登錄狀態設置爲假,您也可以在客戶端執行相同的操作。

所以總的來說,我的意思是說,在客戶端實現相同的邏輯來設置登錄狀態爲false。並基於此,您可以立即顯示任何延遲的登錄對話框。而在BEST PRACTICE中,您應該始終對服務器端進行雙重驗證,以確保每次請求驗證身份時都應檢查客戶端登錄狀態是否與服務器登錄狀態匹配,因爲客戶端的登錄狀態可能會被篡改。

好運...
快樂的探索:-)

+1

謝謝:)。我想我會選擇2.如你所說,我會把一個客戶端變量放到我的頁面上,並在客戶端檢查這個變量來檢查登錄狀態。但是我也會在服務器端進行所有必要的身份驗證檢查。 – 2013-05-02 08:42:02

+0

歡迎來到stackoverflow ..你問什麼問題太寬泛無法回答,但我仍然試圖盡我所能。祝你好運...你也可以接受答案... – 2013-05-02 09:53:05