首頁  >  文章  >  後端開發  >  如何在PHP中進行會話處理?

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

青灯夜游
青灯夜游原創
2019-02-14 17:40:422768瀏覽

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

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

PHP中什麼是會話(session)?

會話(session)是一種在不同網頁上保留資訊的機制,用於在使用者瀏覽網站或應用程式時識別使用者。 【影片教學推薦:PHP教學

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

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

下圖簡單描述了HTTP協定。

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

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

會話(session)允許使用者跨單一網站或應用程式的不同頁面共享訊息, 因此它有助於維護狀態。這使伺服器知道所有請求都來自同一用戶,從而允許網站顯示用戶特定的資訊和首選項。

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

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

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[&#39;logged_in_user_id&#39;] = &#39;1&#39;;
$_SESSION[&#39;logged_in_user_name&#39;] = &#39;Tutsplus&#39;;
 
// 访问会话变量
echo $_SESSION[&#39;logged_in_user_id&#39;];
echo $_SESSION[&#39;logged_in_user_name&#39;];
?>

如上所示,我們使用session_start函數在腳本開頭啟動了一個會話;之後,初始化了幾個會話變數;最後,我們使用$_SESSION超全域存取了這些變數。

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

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

4、修改和刪除會話變數

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

下面透過範例來看看如何修改會話變數。

<?php
session_start();
 
if (!isset($_SESSION[&#39;count&#39;]))
{
  $_SESSION[&#39;count&#39;] = 1;
}
else
{
  ++$_SESSION[&#39;count&#39;];
}
 
echo $_SESSION[&#39;count&#39;];
?>

在上面的脚本中,我们首先检查了是否设置了$_session['count']变量。如果没有设置,我们将设置为1,否则我们将增加1。因此,如果多次刷新此页,可以看到计数器每次递增一个!

另一方面,如果想要删除会话变量,可以使用unset函数,如下面的代码段所示:

<?php
// 开启会话
session_start();
 
// 初始化会话变量
$_SESSION[&#39;logged_in_user_id&#39;] = &#39;1&#39;;
 
// 取消设置会话变量
unset($_SESSION[&#39;logged_in_user_id&#39;]);
?>

这样,我们就无法再访问$_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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn