我對使用PHP中的會話有些困惑,在登錄後維護用戶會話。因此,爲了維護會話,我們可以使用的一種方法是使用PHP中的session_start()。PHP中的會話和登錄混淆
現在,session_start()會生成一個唯一的sessionID,並使用此ID向瀏覽器發送一個cookie,如果我是正確的(正如我從幾個資源中讀取的那樣)。
現在我們來看一個簡單的用戶登錄用例,我需要維護會話。因此,通常情況下,一個非常簡單的情況是,用戶日誌在表單上的相應字段中輸入他的用戶名和密碼。然後用戶按下提交按鈕。
將POST值發送到處理會話的PHP腳本(如login.php)。在login.php裏面,我檢查$ _POST ['username']和$ _POST ['password'],看它是否與數據庫中的值匹配。我們假設值匹配。
所以現在應該創建一個新的會話,對吧?爲什麼我們在login.php的開頭包含session_start()呢?
其次,所以在會話啓動後創建一個sessionID後,它會通過cookie發送到瀏覽器,並記錄在$ _SESSIONS全局變量中。那麼現在的事情就是我們將這個會話與這個特定用戶綁定在一起嗎?據我所知,由於Cookie將由用戶發送每一個請求,並且由於服務器具有相同的sessionID,就像在Cookie中一樣,它也保存在它的最後,服務器會知道請求來自同一用戶。但是,我們並沒有在這個用戶的任何地方(在db等)顯式地記錄這個sessionID。所以如果我需要關於這個用戶的所有其他細節,我將如何得到它?那麼會話ID是如何與存儲在數據庫中的特定用戶的詳細信息相關聯的呢?
舉個例子,我們假設在上面的例子中,我們討論的用戶是用戶A。對於第二個用戶,說用戶B也是如此。因此,現在服務器一定能夠區分來自這兩個用戶的請求,因爲這些用戶將在cookie中發送兩個不同的會話ID與他們的請求。但在服務器端,USER A的請求將如何與數據庫中的USER A的詳細信息相關聯,以及USER B的請求如何與數據庫中的USER B的詳細信息相關聯?
嗨@TechnoKnol感謝您的答覆。我的第二個答案聽起來很清楚。但是,對於我的第一個問題,我的意思是,現在應該創建一個新的會話,對吧?爲什麼我們在login.php的BEGINNING中包含session_start()呢? – qre0ct
你有沒有在php.net上引用'session_start()'? 'session_start()'只告訴PHP開始會話不存儲任何信息。所以如果你在任何地方使用'session_start()'而不是在$ _SESSION中存儲任何信息,那麼它將不允許用戶登錄。 –
我在這裏閱讀它http://www.sitepoint.com/users-php-sessions-mysql/ session_start()會自動設置一個cookie。 – qre0ct