2013-08-26 13 views
-1

我正在構建一個網站,並且正在使用會話來檢查用戶登錄。我想知道是否有更好和更安全的方式來檢查用戶登錄。因爲會話存儲在客戶端計算機中,我認爲它們不是非常安全並且很容易被破解。我是否正確?Facebook和Twitter等大型網站如何檢查用戶是否登錄。我是PHP新手,所以不要說我的問題太基本了。PHP:一種檢查會話以外的用戶登錄的方法

+1

某人要破解會話的唯一方法是,如果他們在您的實際計算機中。您還可以將會話與會話一起使用。 –

+0

會話,會話和會話......您可以使用不同的方式來持續會話,但最後會談到所有會話! :D –

+1

*「我是PHP新手......」--- ---請記住,在使用會話時,您需要在每個使用的頁面中都有'session_start();'。在大多數情況下,這應該是您打開PHP標記後的第一行。 –

回答

1

會議絕對是這裏的方式。

無論您用作身份驗證,如果客戶端計算機受到威脅,客戶端的身份驗證方法可能會被濫用。所以在這方面,任何其他方式只能像會話一樣安全。

所有大型網站都使用會話,通常與cookie一起使用。

4

會話不存儲在客戶端的計算機中。你必須與餅乾混淆!

+0

謝謝你讓我知道。我認爲會議存儲在客戶端計算機中。那麼,如果會話存儲在服務器中,則無法破解它們? – user1763032

+0

Cookie可以包含整個會話。因此,當有人說他們將整個會話存儲在客戶端時,它可能是真實的。 (雖然這種方法實際上對於身份驗證的任何用途來說太不安全了。) –

+0

@ user1763032,我不說會話是100%安全的。 「會話劫持」是一個單獨的話題。但那不是一件容易的事。 –

1

我希望您先了解會話是您識別客戶端的唯一方法。

您不在客戶端或服務器端存儲會話。 (如果你想要一個安全的系統。)

首先你需要了解會話的需求,只有這樣你才能知道會話是什麼。

互聯網是一個無狀態的機器網絡,每個機器都有自己的標識符。我們在發送加載頁面請求或訪問各種鏈接時所做的大部分通信都是通過HTTP(超文本傳輸​​協議)進行的。

HTTP是一種無狀態協議,意味着通過協議進行的任何通信不需要存儲在服務器或客戶端上。

讓我們明白這將意味着,用一個例子:

假設你嘗試登錄到http://example.com

  1. 您填寫表格,點擊發送按鈕。
  2. 然後將表單中的所有數據發送到服務器。
  3. 服務器檢查收到的用戶名和密碼是否正確。如果正確,它會向您發送安全數據。
  4. 在您下次調用Web服務器時,您希望能夠登錄。但是,由於HTTP的無狀態特性,您的服務器不再識別您。

您可以通過每次通話都發送用戶名和密碼來完成此項工作,但這意味着每次請求都必須每次都輸入用戶名和密碼。

這裏是cookie的作用,您將用戶名cookie設置爲Joe,並將密碼cookie設置爲qwerty。現在每次發送請求時,瀏覽器都會發送cookie,您很高興。

現在,這種情況再次出現問題,您需要每次在服務器上進行身份驗證檢查,從而增加對其的負載。

輸入會話。會話是指具有一定背景的國家。它可能是一個登錄用戶,它可能包含您設置的偏好或任何其他類似的東西。

這裏,當用戶第一次登錄時,服務器生成一個會話ID。然後,該會話ID由服務器存儲在數據庫,文件或其存儲器(RAM)以及任何其他數據(如登錄人員的用戶名,首選項等)中。

服務器響應包含會話ID ,其形式可以是cookie,HTML5會話狀態或有時甚至是隱藏字段。

現在,客戶端所做的每個調用都包含會話標識。然後,服務器檢查其會話存儲以查找具有相同ID的任何有效會話,並進入上下文,從而爲通過HTTP進行的通信提供僞狀態機制。

您的瀏覽器存儲此cookie的時間長度也可以由服務器在發送cookie時確定。

有一些進一步的安全措施,比如每次打電話時都要改變會話ID,但只有在你需要時才能進入。

乾杯! :)

+1

感謝您的回答。我學到了東西。 – user1763032