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

来源:https://www.cnblogs.com/heyue0117/archive/2020/01/04/12149817.html
-Advertisement-
Play Games

在PHP中會話處理是一個很重要的概念,它允許用戶信息在網站或應用程式的所有頁面上保持不變。下麵本篇文章就來帶大家學習一下PHP中會話處理的基礎知識,希望對大家有所幫助。 PHP中什麼是會話(session)? 會話(session)是一種在不同網頁上保留信息的機制,用於在用戶瀏覽網站或應用時識別用戶 ...


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

PHP中什麼是會話(session)?

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

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

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

下圖簡要描述了HTTP協議。

 

 

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

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

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

 

 

PHP如何進行會話處理?

1、啟動會話

每當想要處理會話變數時,就需要確保會話已經啟動。有幾種方法可以在PHP中啟動會話。

1)、使用session_start函數

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

 

 

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

2)、自動啟動會話

如果需要在整個應用程式中使用會話,還可以選擇自動啟動會話而不使用session_start函數。

php.ini文件中有一個配置選項session.auto_start,允許我們為每個請求自動啟動會話。預設情況下,它設置為0,我們可以將其設置1為啟用自動啟動功能。

 

 

2、獲取會話ID

伺服器為每個新會話創建一個唯一的id。如果要獲取會話ID,可以使用該session_id功能,如以下代碼段所示。

 

 這應該給你當前的會話ID。該session_id函數很有趣,因為它也可以使用一個參數 - 一個會話ID。如果要將系統生成的會話ID替換為您自己的會話ID,可以將其提供給session_id函數的第一個參數。

 

 

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

3、創建會話變數

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

下麵我們通過代碼示例來看看如何初始化會話變數。

 

 

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

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

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

4、修改和刪除會話變數

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

下麵通過示例來看看如何修改會話變數。

 

 

在上面的腳本中,我們首先檢查了是否設置了$_session['count']變數。如果沒有設置,我們將設置為1,否則我們將增加1。因此,如果多次刷新此頁,可以看到計數器每次遞增一個!

另一方面,如果想要刪除會話變數,可以使用unset函數,如下麵的代碼段所示:

 

 

這樣,我們就無法再訪問$_SESSION[‘logged_in_user_id’]變數了。因為它已被unset函數刪除。

5、銷毀會話

在上面我們知道可以使用unset函數來刪除特定的會話變數;那麼如果要一次刪除所有與會話相關的數據,我們要怎麼辦?

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

下麵我們來看看session_destroy函數是如何工作的。

 

 

說明:session_destroy函數刪除存儲在當前會話中的所有內容。因此,當存儲在磁碟上的會話數據被session_destroy函數刪除時,我們將從後續請求中看到一個空的會話變數。

註:通常,在用戶註銷時才會使用session_destroy函數

有需要學習交流的友人請加入交流群的咱們一起,群內都是1-7年的開發者,希望可以一起交流,探討PHP,swoole這塊的技術 或者有其他問題 也可以問,獲取swoole或者php進階相關資料私聊管理即可

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

點此加入該群​jq.qq.com
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"string.h" 4 #include"conio.h" 5 typedef struct node 6 { 7 char xh[11]; //學號 8 char xm[10]; //姓名 9 ...
  • 前言 本文轉自松哥(網名:江南一點雨)的一篇實用入門文章,寫的挺好的,希望對各位有所幫助。 什麼是面霸?就是在面試中,神擋殺神佛擋殺佛,見招拆招,面到面試官自慚形穢自嘆不如!松哥希望本文能成為你面霸路上的墊腳石! 做 Java 開發,沒有人敢小覷 Spring Boot 的重要性,現在出去面試,無論 ...
  • 什麼是Spring Spring是一個開源的,輕量級Java開發框架; 其核心特性是可以用於開發任何 Java 應用程式,Spring 框架的目標是使 JavaEE應用程式的開發變得更加容易,核心概念是IOC和AOP;這也是學習Spring的重點所在; Spring不是針對某個具體功能,具體層級的框 ...
  • 功能描述: 1)使用tkinter設計程式界面; 2)調用Windows API函數實現錄音機和音樂播放器。 。 參考代碼: ​ 運行界面: ​ ...
  • 不知不覺,一年一度的春運搶票大幕已經拉開,想快速搶到回家的車票嗎?作為程式員,這些技術手段,你一定要知道。 為了讓大家更快捷更便利的搶火車票,各種各樣的搶票軟體應需而生,這類軟體大部分都是付費搶票的機制。 作為程式員,如何用技術手段搶到回家的票?來看看用 Python 寫的搶票腳本。 手把手教你用 ...
  • float和double都是C++中的浮點型數據類型,三者的區別是:1、精度是不同的。float類型是單精度浮點數,double類型是雙精度浮點數。2、分配存儲空間。c++編譯器為flaot類型分配4位元組,為double類型分配8位元組。3、有效位的個數是不同的。float可以提供6位有效數字,dou ...
  • 什麼是JVM JVM是Java Virtual Machine(Java虛擬機)的縮寫,是一個虛構出來的電腦,它屏蔽了與具體操作系統平臺相關的信息,使得Java程式只需生成在Java虛擬機上運行的目標代碼(位元組碼,ByteCode), 就可以在多種平臺上不加修改地運行。這背後其實就是JVM把位元組碼 ...
  • 1.讀入string 需包含頭文件:iostream(iostream中包含string)。 #include <iostream> 方法: 1.讀到空格、tab、回車中任意一個結束:直接cin。 string a; cin >> a; 2.讀一行:getline。 string a; getlin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...