首頁 後端開發 php教程 如何在PHP中進行會話處理?

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

Feb 14, 2019 pm 05:40 PM
php session

在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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles