首頁 後端開發 php教程 如何理解PHP中的會話控制

如何理解PHP中的會話控制

Sep 12, 2017 am 10:07 AM
php 會話 控制

  會話控制是一種追蹤使用者的通訊方式,使用會話控制主要基於以下幾點:由於http協定的無狀態性,使得無法透過協定來建立兩次請求之間的關聯;對於通常的頁面之間的資料傳遞方式get和post而言,主要處理參數的傳遞、資料的輸入兩個頁間簡單的資料傳遞,對於一個使用者的在網站上的多個頁面,多種不同的數據,可能還有權限的不同而導致頁面的不同、操作方式的不同等等,使用get和post非常繁瑣。

      ##1.cookie方式

      為了對使用者進行跟踪,就必須對使用者進行標記,cookie的思想就是,當使用者造訪網站的第一個頁面時,透過設定使用者的資訊標識,web伺服器將其以文字檔案的形式存放到使用者的電腦上面,這些檔案就是所謂的cookie,以鍵值對的方式存儲,當用戶再訪問第二個該網站的頁面時,將通過http頭信息,將攜帶cookie文件中的信息一起訪問服務器,並重新對剛才的用戶信息進行驗證,這樣避免了每次訪問都輸入用戶信息,可以確定多個頁面之間的訪問是不是同一用戶了。

      將資訊設定為cookie的函數:setcookie($key, $value, $expire, $path, $domain, $secure)。

      參數依序為:鍵、值、過期時間(UNIX時間戳,預設為0表示關閉瀏覽器則cookie消失)、存取cookie的路徑,設定後伺服器上該路徑下的腳本可造訪cookie(預設為根目錄)、存取cookie的域名,只有該網域(如www.example.com)下的網站網頁可存取cookie、是否為https安全連線才啟用cookie。

      例如透過post提交表單後記錄一些資訊

<?php    
    if(isset($_POST)){        
    $time = time();        
    setcookie(&#39;user&#39;, $_POST[&#39;user&#39;], $time+3600);  // 时间参数需要比当前时间点大,以表示cookie信息的有效时间        s
    etcookie(&#39;data&#39;, array(1,2,3), $time+1200);  // 可以存放各种数据     }
   保存cookie成功后,可直接到$_COOKIE超全局数组中以键名取得该值,非常方便,如echo $_COOKIE[&#39;user&#39;],基本的数据类型都支持       cookie的删除仍是通过setcookie进行,最好写成将时间提前的形式,或者直接写一个键名,比如在用户点击退出时进行该项操作
 setcookie(&#39;user&#39;, &#39;&#39;, time()-200);  // 时间提前,相对当前时间 
 setcookie(&#39;user&#39;);  // 简写,只写键名
登入後複製
  2.session方式
登入後複製

      session與cookie相似,只是原來將資訊存在用戶端的,現在改為存到服務端,但在用戶端產生一個標識id,這個id預設是儲存到用戶本地的cookie中,所以session又跟cookie扯上了關係。這樣用戶第一次造訪時將資訊存到web伺服器,並隨機分配給用戶一個固定長度的字串(session id),以後用戶再訪問其他頁面,就帶著這個id去服務端裡找對應用戶數據訊息,於是就可以追蹤使用者了,使用cookie的session稱為基於cookie的session。

      但使用者可以將瀏覽器設為停用cookie(雖然一般不會這麼做),有的網站在偵測到停用cookie後會強制讓使用者去開啟,但卻是存在這麼一種情況,如此一來透過基於cookie的方式行不通了,這時就可以透過在URL後面附帶一個session id的get形式傳遞了,當然也可以透過http post。

      session的使用

      首先,要用session_start()開啟一個會話。注意對於這類網路函數,在它前面不准有輸出,即使是

      然後,註冊會話變量,也就是訪問用戶資訊或有用的數據,不需要使用什麼函數,直接存入$ _SESSION超全域數組,例如$_SESSION['user'] = $_POST[['user'],這些資料將會儲存到服務端的某個檔案中,當然也可能是快取(memcache、redis)中。

      當跳到其他頁面時,在其他頁面也要先開啟這個會話,依然是session_start(),如果會話已經開啟,則函數會傳回目前會話,如果沒有則重新開啟。

     最後,使用者退出或某些原因銷毀對話,要註銷這些變數。分四步驟走:

1.仍然是先开启会话,或者是跳转到其他页面时,再次返回已经存在的会话,需要确保前面没有输出
    session_start();   // 开启或返回一个会话
 
2.清空$_SESSION数组中的相关变量
  unset($_SESSION[&#39;robert&#39;])  // 销毁某一个变量  $_SESSION = array();  // 或者一次性全部销毁会话变量
3.清除保存在客户端的cookie,别忘了session id还在用户计算机上面
if(
isset(
$_COOKIE[
session_name
()])){        
unset(
$_COOKIE[
session_name()]);    
//
session_name()获取sesion的名,session id也是以名和值的形式存储的
    }
4.彻底销毁存储到服务器的信息
 session_destroy();
登入後複製

  四步驟走完,就結束了一次session會話。

3.使用會話控制的基本步驟如下:

  1)開始一個會話

####################################### #    呼叫session_start()函數即可,函數的特定功能可以查閱PHP的文檔。需要注意的是,必須在使用會話的腳本開始部分呼叫這個函數,如果沒有,所有保存在該會話中的資訊都無法在腳本中使用。除了手動調用session_start()函數外,也可以自動配置PHP自動調用,可以穀歌之。 ######  2)註冊一個會話變數######    從PHP4.1以後,會話變數保存在超級全域數組$_SESSION中。要建立一會話變量,只需要在數組中設定一個元素,如$_SESSION['myvar'] = 5;######  3) 使用一個會話變數###

    要使用一個會話變數很簡單,使用$_SESSION陣列存取已儲存的會話變數即可,如 echo $_SESSION['mywar']; 會列印出 5。使用會話前必須先使用session_start()函數啟動一個會話。

  4)註銷變數和銷毀會話

    註銷變數直接使用unset即可,如unset($_SESSION['myvar']),如何要一次銷毀所有會話變數,可以使用unset ($_SESSION); 當使用完一個會話後,首先應該註銷所有的變量,然後再調用session_destroy() 來清除會話ID。 

以上是如何理解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