如何在PHP中進行會話處理?

在PHP中會話處理是一個很重要的概念,它容許用戶信息在網站或應用程序的全部頁面上保持不變。下面本篇文章就來帶你們學習一下PHP中會話處理的基礎知識,但願對你們有所幫助。php

PHP中什麼是會話(session)?node

會話(session)是一種在不一樣網頁上保留信息的機制,用於在用戶瀏覽網站或應用時識別用戶。數組

你們必定會有這樣一個疑問:爲何網站須要會話?討論這個問題前,咱們須要回過頭來看看HTTP協議是如何工做的。瀏覽器

HTTP協議是無狀態協議,這意味着服務器沒法在多個請求之間記住特定用戶。例如,當您訪問網頁時,服務器只負責提供所請求頁面的內容。所以,當您訪問同一網站的其餘頁面時,Web服務器會分別解釋每一個請求,就好像它們彼此無關。服務器沒法知道每一個請求都來自同一個用戶。服務器

下圖簡要描述了HTTP協議。swoole

 

 

在這個過程當中,若是想要顯示特定用戶的信息,則必須在每一個請求中對用戶進行身份驗證。想象一下若是每次發出請求時,都須要進行在頁面上輸入用戶名和密碼進行身份驗證;這樣實在太繁瑣了,根本不實用。而,會話(session)在這個時間就派上用場了。session

會話(session)容許用戶跨單個站點或應用程序的不一樣頁面共享信息, 所以它有助於維護狀態。這使服務器知道全部請求都來自同一用戶,從而容許站點顯示用戶特定的信息和首選項。函數

下圖描述了HTTP協議如何與會話一塊兒使用。學習

 

 

PHP如何進行會話處理?網站

一、啓動會話

每當想要處理會話變量時,就須要確保會話已經啓動。有幾種方法能夠在PHP中啓動會話。

1)、使用session_start函數

這是最多見到的方法,其中會話由session_start函數啓動。

 

 

重要的是,session_start在將任何輸出發送到瀏覽器以前,必須在腳本的開頭調用該函數。不然,你會遇到臭名昭着的Headers are already sent錯誤。

2)、自動啓動會話

若是須要在整個應用程序中使用會話,還能夠選擇自動啓動會話而不使用session_start函數。

php.ini文件中有一個配置選項session.auto_start,容許咱們爲每一個請求自動啓動會話。默認狀況下,它設置爲0,咱們能夠將其設置1爲啓用自動啓動功能。

 

 

二、獲取會話ID

服務器爲每一個新會話建立一個惟一的id。若是要獲取會話ID,可使用該session_id功能,如如下代碼段所示。

 

 這應該給你當前的會話ID。該session_id函數頗有趣,由於它也可使用一個參數 - 一個會話ID。若是要將系統生成的會話ID替換爲您本身的會話ID,能夠將其提供給session_id函數的第一個參數。

 

 

重要的是要注意,當您想要使用自定義會話ID啓動會話時,必須將session_id函數放在session_start以前調用。

三、建立會話變量

一旦啓動會話,$_SESSION就會使用相應的會話信息初始化超全局數組。默認狀況下,它使用空白數組初始化,您可使用鍵值對存儲更多信息。

下面咱們經過代碼示例來看看如何初始化會話變量。

 

 

如上所示,咱們使用session_start函數在腳本開頭啓動了一個會話;以後,初始化了幾個會話變量;最後,咱們使用$_SESSION超全局訪問了這些變量。

使用$_SESSION超全局將數據存儲在會話中時,它最終存儲在會話啓動時建立的服務器上的相應會話文件中。經過這種方式,會話數據在多個請求之間共享。

正如咱們所討論的,會話信息在請求之間共享,所以在一個頁面上初始化的會話變量也能夠從其餘頁面訪問,直到會話到期爲止。一般,會話在瀏覽器關閉時到期。

四、修改和刪除會話變量

咱們能夠像修改常規PHP變量同樣修改或刪除先前在應用程序中建立的會話變量。

下面經過示例來看看如何修改會話變量。

 

 

在上面的腳本中,咱們首先檢查了是否設置了$_session['count']變量。若是沒有設置,咱們將設置爲1,不然咱們將增長1。所以,若是屢次刷新此頁,能夠看到計數器每次遞增一個!

另外一方面,若是想要刪除會話變量,可使用unset函數,以下面的代碼段所示:

 

 

這樣,咱們就沒法再訪問$_SESSION[‘logged_in_user_id’]變量了。由於它已被unset函數刪除。

五、銷燬會話

在上面咱們知道可使用unset函數來刪除特定的會話變量;那麼若是要一次刪除全部與會話相關的數據,咱們要怎麼辦?

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

下面咱們來看看session_destroy函數是如何工做的。

 

 

說明:session_destroy函數刪除存儲在當前會話中的全部內容。所以,當存儲在磁盤上的會話數據被session_destroy函數刪除時,咱們將從後續請求中看到一個空的會話變量。

注:一般,在用戶註銷時纔會使用session_destroy函數

有須要學習交流的友人請加入交流羣的我們一塊兒,羣內都是1-7年的開發者,但願能夠一塊兒交流,探討PHP,swoole這塊的技術 或者有其餘問題 也能夠問,獲取swoole或者php進階相關資料私聊管理便可

別忘了點贊哦,按期分享乾貨

點此加入該羣​jq.qq.com
相關文章
相關標籤/搜索