在PHP中會話處理是一個(gè)很重要的概念,它允許用戶信息在網(wǎng)站或應(yīng)用程序的所有頁面上保持不變。下面本篇文章就來帶大家學(xué)習(xí)一下PHP中會話處理的基礎(chǔ)知識,希望對大家有所幫助。
PHP中什么是會話(session)?
會話(session)是一種在不同網(wǎng)頁上保留信息的機(jī)制,用于在用戶瀏覽網(wǎng)站或應(yīng)用時(shí)識別用戶。
大家一定會有這樣一個(gè)疑問:為什么網(wǎng)站需要會話?討論這個(gè)問題前,我們需要回過頭來看看HTTP協(xié)議是如何工作的。
HTTP協(xié)議是無狀態(tài)協(xié)議,這意味著服務(wù)器無法在多個(gè)請求之間記住特定用戶。例如,當(dāng)您訪問網(wǎng)頁時(shí),服務(wù)器只負(fù)責(zé)提供所請求頁面的內(nèi)容。因此,當(dāng)您訪問同一網(wǎng)站的其他頁面時(shí),Web服務(wù)器會分別解釋每個(gè)請求,就好像它們彼此無關(guān)。服務(wù)器無法知道每個(gè)請求都來自同一個(gè)用戶。
下圖簡要描述了HTTP協(xié)議。
在這個(gè)過程中,如果想要顯示特定用戶的信息,則必須在每個(gè)請求中對用戶進(jìn)行身份驗(yàn)證。想象一下如果每次發(fā)出請求時(shí),都需要進(jìn)行在頁面上輸入用戶名和密碼進(jìn)行身份驗(yàn)證;這樣實(shí)在太繁瑣了,根本不實(shí)用。而,會話(session)在這個(gè)時(shí)間就派上用場了。
會話(session)允許用戶跨單個(gè)站點(diǎn)或應(yīng)用程序的不同頁面共享信息, 因此它有助于維護(hù)狀態(tài)。這使服務(wù)器知道所有請求都來自同一用戶,從而允許站點(diǎn)顯示用戶特定的信息和首選項(xiàng)。
下圖描述了HTTP協(xié)議如何與會話一起使用。
PHP如何進(jìn)行會話處理?
1、啟動會話
每當(dāng)想要處理會話變量時(shí),就需要確保會話已經(jīng)啟動。有幾種方法可以在PHP中啟動會話。
1)、使用session_start函數(shù)
這是最常見到的方法,其中會話由session_start函數(shù)啟動。
重要的是,session_start在將任何輸出發(fā)送到瀏覽器之前,必須在腳本的開頭調(diào)用該函數(shù)。否則,你會遇到臭名昭著的Headers are already sent錯誤。
2)、自動啟動會話
如果需要在整個(gè)應(yīng)用程序中使用會話,還可以選擇自動啟動會話而不使用session_start函數(shù)。
php.ini文件中有一個(gè)配置選項(xiàng)session.auto_start,允許我們?yōu)槊總€(gè)請求自動啟動會話。默認(rèn)情況下,它設(shè)置為0,我們可以將其設(shè)置1為啟用自動啟動功能。
2、獲取會話ID
服務(wù)器為每個(gè)新會話創(chuàng)建一個(gè)唯一的id。如果要獲取會話ID,可以使用該session_id功能,如以下代碼段所示。
這應(yīng)該給你當(dāng)前的會話ID。該session_id函數(shù)很有趣,因?yàn)樗部梢允褂靡粋€(gè)參數(shù) – 一個(gè)會話ID。如果要將系統(tǒng)生成的會話ID替換為您自己的會話ID,可以將其提供給session_id函數(shù)的第一個(gè)參數(shù)。
重要的是要注意,當(dāng)您想要使用自定義會話ID啟動會話時(shí),必須將session_id函數(shù)放在session_start之前調(diào)用。
3、創(chuàng)建會話變量
一旦啟動會話,$_SESSION就會使用相應(yīng)的會話信息初始化超全局?jǐn)?shù)組。默認(rèn)情況下,它使用空白數(shù)組初始化,您可以使用鍵值對存儲