搜尋
首頁後端開發php教程PHP 的會話控制

PHP 的會話控制

Apr 09, 2018 pm 04:07 PM
php會話控制

本篇文章的內容給大家分享的是PHP中的繪畫控制,有需要的朋友可以參考一下

會話控制

#HTTP 協定是WEB 伺服器與瀏覽器相互通信的協議,它是一種無狀態協議,即每個HTTP 請求之間是相互獨立的。因此,HTTP 協定沒有一個內建的機制來維護兩個事務之間的狀態。例如,當一個使用者在請求一個頁面後再去請求另一個頁面時,HTTP 將無法告訴我們這兩個請求是否來自同一個使用者。

在網站中,我們經常需要追蹤一個變數:透過對變數的跟踪,使多個請求事物之間建立聯繫,再根據授權和使用者身分顯示不同的內容、不同頁面。這就是會話控制技術。

常用的會話控制技術有 CookieSession。簡單地說,Cookie 是透過在客戶端中記錄資訊而確定使用者身分;Session 是透過在伺服器端記錄資訊而確定使用者身分。

Cookie 是一個很小的文字文件,包含在 HTTP 請求封包中在 Web 伺服器和瀏覽器之間傳遞。 Cookie 的工作原理如下:

  1. 伺服器透過在HTTP 回應封包中設定一個Set-Cookie 字段,並將Cookie 資料放在Set- Cookie 欄位中隨著HTTP 封包傳給瀏覽器;

  2. 瀏覽器在接收到HTTP 回應封包後,請檢查到Set-Cookie#欄位有值,會在本地創建一個Cookie 文件來保存資料;

  3. 當瀏覽器再次向該伺服器發送請求時,瀏覽器會先搜尋本地保存的Cookie 文件,如果在Cookie 文件中有任何與正在連接的URL 相關的Cookie,就在HTTP 請求報文中設置一個Cookie 字段,並把Cookie 文件中的資料添加到該字段中,最後把攜帶Cookie 字段的HTTP 請求報文發送給伺服器。

Cookie 可以用來保存使用者名稱、密碼、個人化設定等一些簡單的訊息,以下是Cookie 的使用說明:

建立
<?php
setcookie("Cookie", "cookievalue", time()+3600);
必須在HTML 檔案的內容輸出之前呼叫setcookie()
接收
<?php
echo $_COOKIE["Cookie"];
刪除
<?php
#方法一:将值设为空
setcookie("Cookie", null);

#方法二:将过期时间设为过去时间
setcookie("Cookie", "value" , time());

Session

Session 是在伺服器端保持用戶會話資料的一種方法,其工作原理如下:

  1. 當瀏覽器第一次存取PHP 腳本時,seesion_start() 函數會建立一個唯一的Session ID(每個客戶端都有一個唯一的識別),並自動通過HTTP 的回應頭,將這個Session ID 儲存到客戶端Cookie 中。同時,也在伺服器端建立以Session ID 命名的文件,用於保存這個使用者的會話資訊;

  2. 當同一個使用者再次造訪這個網站時,會自動通過HTTP的請求頭將Cookie 中儲存的Seesion ID 再攜帶過來;

  3. 伺服器PHP 腳本接受到客戶端請求,這時session_start() 函數就不會再去分配一個新的Session ID,而是在伺服器的硬碟中去尋找和這個Session ID 同名的Session 文件,將這之前為這個用戶保存的會話資訊讀出。

首先,建立 Session 唯一識別的方法有兩種:透過 Cookie 或 GET 方式。 PHP 在預設情況下使用Session 會建立一個名叫PHPSESSID 的Cookie(可以透過php.ini 修改session.name 的值),如果客戶端停用cookie,可以指定透過GET 方式把Session ID 傳到伺服器(修改php.ini 中session.use_trans_sid 等參數)。其次,Session 是以文件的形式保存的。 php.ini 中有個設定項目 --session.save_path= "" ,這個裡面填入的路徑,將會儲存所有 Session 檔。 Session 檔案的命名格式是:sess_[PHPSESSID的值]。每一個文件,裡面保存了一個會話的資料。最後,保存在Session 檔案中的資料是經過序列化處理的,例如:

cityID|i:0;cityName|s:3:"all";fanwe_lang|s:5:"zh-cn";fanwe_currency|a:4:{s:2:"id";s:1:"1";s:6:"name_1";s:9:"人民币";s:4:"unit";s:3:"¥";s:5:"radio";s:6:"1.0000";}_fanwe_hash__|s:32:"77c18770c6cb5d89444c407aaa3e8477";

Session 同樣可以用來保存使用者名稱、密碼、個人化設定等一些簡單的訊息,以下是Session 的使用說明:

建立
//启动 session
session_start();

//注册session变量,赋值为一个用户的名称
$_SESSION["username"] = "jochen";

//注册session变量,赋值为一个用户的ID
$_SESSION["uid"] = 1;
注意:必須在HTML 檔案的內容輸出之前呼叫session_start()
讀取
<?php
session_start();
echo $_SESSION["username"]; # # jochen
echo $_SESSION["uid"];      # 1
銷毀
#
<?php
session_start();
 
unset($_SESSION["username"]);
unset($_SESSION["uid"]);
要注意的是,當session 檔案比較多的情況下,將會產生I/Q 讀寫效能問題。此時可以採用 memcached、redis 等快取系統。

相關推薦:

PHP學習之陣列


#

以上是PHP 的會話控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱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

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

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用