在PHP中進行對談處理(程式碼詳解)

2020-07-16 10:06:13

在PHP中對談處理是一個很重要的概念,它允許使用者資訊在網站或應用程式的所有頁面上保持不變。下面本篇文章就來帶大家學習一下PHP中對談處理的基礎知識,希望對大家有所幫助。

PHP中什麼是對談(session)?

對談(session)是一種在不同網頁上保留資訊的機制,用於在使用者瀏覽網站或應用時識別使用者。

大家一定會有這樣一個疑問:為什麼網站需要對談?討論這個問題前,我們需要回過頭來看看HTTP協定是如何工作的。

HTTP協定是無狀態協定,這意味著伺服器無法在多個請求之間記住特定使用者。例如,當您存取網頁時,伺服器只負責提供所請求頁面的內容。因此,當您存取同一網站的其他頁面時,Web伺服器會分別解釋每個請求,就好像它們彼此無關。伺服器無法知道每個請求都來自同一個使用者。

下圖簡要描述了HTTP協定。

52168dd00c4c30823e2517ebcc3372d.png

在這個過程中,如果想要顯示特定使用者的資訊,則必須在每個請求中對使用者進行身份驗證。想象一下如果每次發出請求時,都需要進行在頁面上輸入使用者名稱和密碼進行身份驗證;這樣實在太繁瑣了,根本不實用。而,對談(session)在這個時間就派上用場了。

對談(session)允許使用者跨單個站點或應用程式的不同頁面共用資訊, 因此它有助於維護狀態。這使伺服器知道所有請求都來自同一使用者,從而允許站點顯示使用者特定的資訊和偏好設定。

下圖描述了HTTP協定如何與對談一起使用。

596d3570f4e1297314582680446dcdd.png

PHP如何進行對談處理?

1、啟動對談

每當想要處理對談變數時,就需要確保對談已經啟動。有幾種方法可以在PHP中啟動對談。

1)、使用session_start函數

這是最常見到的方法,其中對談由session_start函數啟動。

ca45d323952fb10a0979914fd6e2829.png

重要的是,session_start在將任何輸出傳送到瀏覽器之前,必須在指令碼的開頭呼叫該函數。否則,你會遇到臭名昭著的Headers are already sent錯誤。

2)、自動啟動對談

如果需要在整個應用程式中使用對談,還可以選擇自動啟動對談而不使用session_start函數。

php.ini檔案中有一個設定選項session.auto_start,允許我們為每個請求自動啟動對談。預設情況下,它設定為0,我們可以將其設定1為啟用自動啟動功能。

30f6cce8e3fcf90ecef5d485d65adbf.png

2、獲取對談ID

伺服器為每個新對談建立一個唯一的id。如果要獲取對談ID,可以使用該session_id功能,如以下程式碼段所示。

6bf6da934d875ee2edc84413da4f486.png

這應該給你當前的對談ID。該session_id函數很有趣,因為它也可以使用一個引數 - 一個對談ID。如果要將系統生成的對談ID替換為您自己的對談ID,可以將其提供給session_id函數的第一個引數。

e42263bd289f216c402d99f3604f055.png

重要的是要注意,當您想要使用自定義對談ID啟動對談時,必須將session_id函數放在session_start之前呼叫。

3、建立對談變數

一旦啟動對談,$_SESSION就會使用相應的對談資訊初始化超全域性陣列。預設情況下,它使用空白陣列初始化,您可以使用鍵值對儲存更多資訊。

下面我們通過程式碼範例來看看如何初始化對談變數。

7a5b0b9744416100d9cc518eef72a4b.png

如上所示,我們使用session_start函數在指令碼開頭啟動了一個對談;之後,初始化了幾個對談變數;最後,我們使用$_SESSION超全域性存取了這些變數。

使用$_SESSION超全域性將資料儲存在對談中時,它最終儲存在對談啟動時建立的伺服器上的相應對談檔案中。通過這種方式,對談資料在多個請求之間共用。

正如我們所討論的,對談資訊在請求之間共用,因此在一個頁面上初始化的對談變數也可以從其他頁面存取,直到對談到期為止。通常,對談在瀏覽器關閉時到期。

4、修改和刪除對談變數

我們可以像修改常規PHP變數一樣修改或刪除先前在應用程式中建立的對談變數。

下面通過範例來看看如何修改對談變數。

125dfbda6ffcd82910f2ab0bf26d5de.png

在上面的指令碼中,我們首先檢查了是否設定了$_session['count']變數。如果沒有設定,我們將設定為1,否則我們將增加1。因此,如果多次重新整理此頁,可以看到計數器每次遞增一個!

另一方面,如果想要刪除對談變數,可以使用unset函數,如下面的程式碼段所示:

61638c5167b1342abd5f0ea43ade04c.png

這樣,我們就無法再存取$_SESSION[‘logged_in_user_id’]變數了。因為它已被unset函數刪除。

5、銷毀對談

在上面我們知道可以使用unset函數來刪除特定的對談變數;那麼如果要一次刪除所有與對談相關的資料,我們要怎麼辦?

其實很簡單,我們可以使用session_destroy函數。

下面我們來看看session_destroy函數是如何工作的。

6c21462e8f5c1e8d02769b25b65fd13.png

說明:session_destroy函數刪除儲存在當前對談中的所有內容。因此,當儲存在磁碟上的對談資料被session_destroy函數刪除時,我們將從後續請求中看到一個空的對談變數。

註:通常,在使用者登出時才會使用session_destroy函數

以上就是在PHP中進行對談處理(程式碼詳解)的詳細內容,更多請關注TW511.COM其它相關文章!