在PHP中會話處理是一個很重要的概念,它允許使用者資訊在網站或應用程式的所有頁面上保持不變。以下這篇文章就來帶大家學習PHP中會話處理的基礎知識,希望對大家有幫助。
PHP中什麼是會話(session)?
會話(session)是一種在不同網頁上保留資訊的機制,用於在使用者瀏覽網站或應用程式時識別使用者。 【影片教學推薦:PHP教學】
大家一定會有這樣一個疑問:為什麼網站需要會話? 討論這個問題前,我們需要回過頭來看看HTTP協定是如何運作的。
HTTP協定是無狀態協定,這表示伺服器無法在多個請求之間記住特定使用者。例如,當您造訪網頁時,伺服器只負責提供所要求頁面的內容。因此,當您造訪同一網站的其他頁面時,網路伺服器會分別解釋每個請求,就好像它們彼此無關。伺服器無法知道每個請求都來自同一個使用者。
下圖簡單描述了HTTP協定。
在這個過程中,如果想要顯示特定使用者的訊息,則必須在每個請求中對使用者進行身份驗證。想像每次發出請求時,都需要進行在頁面上輸入使用者名稱和密碼進行身份驗證;這樣實在太繁瑣了,根本不實用。而,會話(session)在這個時間就派上用場了。
會話(session)允許使用者跨單一網站或應用程式的不同頁面共享訊息, 因此它有助於維護狀態。這使伺服器知道所有請求都來自同一用戶,從而允許網站顯示用戶特定的資訊和首選項。
下圖描述了HTTP協定如何與會話一起使用。
PHP如何進行會話處理?
1、啟動會話
每當想要處理會話變數時,就需要確保會話已經啟動。有幾種方法可以在PHP中啟動會話。
1)、使用session_start函數
這是最常被看到的方法,其中會話由session_start函數啟動。
<?php // 启动session session_start(); // 操作会话变量 ?>
重要的是,session_start在將任何輸出傳送到瀏覽器之前,必須在腳本的開頭呼叫該函數。否則,你會遇到臭名昭著的Headers are already sent錯誤。
2)、自動啟動會話
如果需要在整個應用程式中使用會話,也可以選擇自動啟動會話而不使用session_start函數。
php.ini檔案中有一個設定選項session.auto_start,允許我們為每個請求自動啟動會話。預設情況下,它設定為0,我們可以將其設定1為啟用自動啟動功能。
session.auto_start = 1
2、取得會話ID
伺服器為每個新會話建立一個唯一的id。如果要取得會話ID,可以使用該session_id功能,如下列程式碼段所示。
<?php session_start(); echo session_id(); ?>
這應該給你目前的會話ID。該session_id函數很有趣,因為它也可以使用一個參數 - 一個會話ID。如果您要將系統產生的會話ID替換為您自己的會話ID,可以將其提供給session_id函數的第一個參數。
<?php session_id(YOUR_SESSION_ID); session_start(); ?>
重要的是要注意,當您想要使用自訂會話ID啟動會話時,必須將session_id函數放在session_start之前呼叫。
3、建立會話變數
一旦啟動會話,$_SESSION就會使用對應的會話資訊初始化超全域陣列。預設情況下,它使用空白數組初始化,您可以使用鍵值對儲存更多資訊。
下面我們透過程式碼範例來看看如何初始化會話變數。
<?php // 开启会话 session_start(); // 初始化会话变量 $_SESSION['logged_in_user_id'] = '1'; $_SESSION['logged_in_user_name'] = 'Tutsplus'; // 访问会话变量 echo $_SESSION['logged_in_user_id']; echo $_SESSION['logged_in_user_name']; ?>
如上所示,我們使用session_start函數在腳本開頭啟動了一個會話;之後,初始化了幾個會話變數;最後,我們使用$_SESSION超全域存取了這些變數。
使用$_SESSION超全域將資料儲存在會話中時,它最終儲存在會話啟動時所建立的伺服器上的對應會話檔案中。透過這種方式,會話資料在多個請求之間共用。
正如我們所討論的,會話資訊在請求之間共享,因此在一個頁面上初始化的會話變數也可以從其他頁面訪問,直到會話到期為止。通常,會話在瀏覽器關閉時到期。
4、修改和刪除會話變數
我們可以像修改常規PHP變數一樣修改或刪除先前在應用程式中建立的會話變數。
下面透過範例來看看如何修改會話變數。
<?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 1; } else { ++$_SESSION['count']; } echo $_SESSION['count']; ?>
在上面的脚本中,我们首先检查了是否设置了$_session['count']变量。如果没有设置,我们将设置为1,否则我们将增加1。因此,如果多次刷新此页,可以看到计数器每次递增一个!
另一方面,如果想要删除会话变量,可以使用unset函数,如下面的代码段所示:
<?php // 开启会话 session_start(); // 初始化会话变量 $_SESSION['logged_in_user_id'] = '1'; // 取消设置会话变量 unset($_SESSION['logged_in_user_id']); ?>
这样,我们就无法再访问$_SESSION[‘logged_in_user_id’]变量了。因为它已被unset函数删除。
5、销毁会话
在上面我们知道可以使用unset函数来删除特定的会话变量;那么如果要一次删除所有与会话相关的数据,我们要怎么办?
其实很简单,我们可以使用session_destroy函数。
下面我们来看看session_destroy函数是如何工作的。
<?php //开启会话 session_start(); // 假设我们已经在另一个脚本中初始化了几个会话变量 // 销毁此会话中的所有内容 session_destroy(); ?>
说明:session_destroy函数删除存储在当前会话中的所有内容。因此,当存储在磁盘上的会话数据被session_destroy函数删除时,我们将从后续请求中看到一个空的会话变量。
注:通常,在用户注销时才会使用session_destroy函数。
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!
以上是如何在PHP中進行會話處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!