PHP語法高級篇(三):Cookie與會話

Cookie與會話在 Web 編程中十分實用:Cookie 能實現一周免登錄,還能記住用戶的主題偏好;會話可保存當前用戶信息,也能臨時存儲購物車數據。本篇文章將記錄Cookie與會話的學習過程。


一、Cookie

cookie 常用于識別用戶。cookie 是服務器在用戶的計算機上嵌入的一個小文件。每當同一臺計算機使用瀏覽器請求頁面時,它也會發送該 cookie。

1、創建/檢索 cookie

setcookie()?函數用于創建 cookie。

setcookie(string $name,string $value = "",int $expires_or_options = 0,string $path = "",string $domain = "",bool $secure = false,bool $httponly = false
): bool

setcookie() 定義了 Cookie,會和剩下的消息頭一起發送給客戶端。必須在腳本產生任意輸出之前發送 Cookie(由于協議的限制)。請在產生任何輸出之前(包括<html>和<head>或者空格)調用本函數。

一旦設置 Cookie 后,下次打開頁面時可以使用 $_COOKIE 讀取。

參數

name

必需。Cookie 名稱。

value

可選。Cookie 值。這個值儲存于用戶的電腦里,不要儲存敏感信息。比如 name 是 'cookiename',可通過 $_COOKIE['cookiename'] 獲取它的值。

expires_or_options

可選。Cookie 的過期時間。這是 Unix 時間戳,即紀元以來的秒數。一種設置此值的方式是將 cookie 過期前的秒數與調用 time() 的結果相加。例如,time()+60*60*24*30 就是設置 Cookie 30 天后過期。還有一種選擇就是使用 mktime() 函數。如果設置為 0 或者忽略,Cookie 會在會話結束時過期(關掉瀏覽器時)。

path

可選。Cookie 有效的服務器路徑。設置成 '/' 時,Cookie 對整個域名 domain 有效。如果設置成 '/foo/',Cookie 僅僅對 domain 中 /foo/ 目錄及其子目錄有效(比如 /foo/bar/)。默認值是設置 Cookie 時的當前目錄。

domain

可選。Cookie 的有效域名/子域名。設置成子域名(例如 'www.example.com'),會使 Cookie 對這個子域名和它的三級域名有效(例如 w2.www.example.com)。要讓 Cookie 對整個域名有效(包括它的全部子域名),只要設置成域名就可以了(這個示例里是 'example.com')。

secure

可選。設置這個 Cookie 是否僅僅通過安全的 HTTPS 連接傳給客戶端。設置成 true 時,只有安全連接存在時才會設置 Cookie。如果是在服務器端處理這個需求,程序員需要僅僅在安全連接上發送此類 Cookie(通過 $_SERVER["HTTPS"] 判斷)。

httponly

可選。設置成 true,Cookie 僅可通過 HTTP 協議訪問。這意思就是 Cookie 無法通過類似 JavaScript 這樣的腳本語言訪問。要有效減少 XSS 攻擊時的身份竊取行為,可建議用此設置(雖然不是所有瀏覽器都支持)。

返回值?

如果 setcookie() 成功運行,返回 true。

通過 $_COOKIE 可以獲取 cookie 中設置的內容。

$_COOKIE['cookie名稱'] 

示例

<?php
$cookie_name = "user";
$cookie_value = "張三";
setcookie($cookie_name, $cookie_value, time() + 3600); // 1小時過期
?>
<html><body><?phpecho "<h1>歡迎您:" .  $_COOKIE[$cookie_name] . "</h1>";?></body>
</html>

注意setcookie()?函數必須出現在 <html> 標簽之前。

2、修改 cookie 值?

要修改 Cookie,只需再次使用 setcookie() 函數設置 cookie 即可:

<?php
$cookie_name = "user";
$cookie_value = "李四"; // 將 "張三" 更改為了 "李四"
setcookie($cookie_name, $cookie_value, time() + 3600); // 1小時過期
?>
<html><body><?phpecho "<h1>歡迎您:" .  $_COOKIE[$cookie_name] . "</h1>";?></body>
</html>

3、刪除 cookie

要刪除一個 Cookie,應該設置過期時間為過去,以觸發瀏覽器的刪除機制。

<?php
// 設置過期時間為一小時前
setcookie("user", "", time() - 3600);
?>

二、會話

會話(session)是一種(在變量中)存儲信息以供跨多個頁面使用的方法。與 cookie 不同,這些信息不會存儲在用戶的計算機上。默認情況下,會話變量在用戶關閉瀏覽器之前一直存在。換句話說,瀏覽器關閉后,會話變量將被銷毀。

1、開始 PHP 會話

會話通過?session_start()?函數開始。

session_start(array $options = []): bool

session_start() 會創建新會話或者重用現有會話。如果通過 GET 或者 POST 方式,或者使用 cookie 提交了會話 ID,則會重用現有會話。

參數

options

此參數是一個關聯數組,如果提供,那么會用其中的項目覆蓋 會話配置指示 中的配置項。此數組中的鍵無需包含 session. 前綴。

?返回值

成功開始會話返回 true ,反之返回 false

會話變量通過 PHP 全局變量:$_SESSION?設置。

現在,創建一個名為 "demo_session1.php" 的新頁面。在該頁面中,啟動一個新的 PHP 會話并設置一些會話變量:

<?php
// 開始會話
session_start();
// 設置會話變量
$_SESSION["username"] = "張三";
$_SESSION["age"] = "18";

注意:session_start() 函數必須是您文檔中的第一個內容。在任何 HTML 標簽之前。

2、獲取 PHP 會話變量值?

通過 $_SESSION 可以獲取 session 中設置的內容。

$_SESSION['session名稱'] 

現在,我們來創建另一個名為 "demo_session2.php" 的頁面。從該頁面,我們將訪問在第一頁("demo_session1.php")上設置的會話信息。

需要注意的是,會話變量不是單獨傳遞給每個新頁面的,而是從我們在每個頁面開始時打開的會話(session_start())中檢索的。

<?php
// 開始會話
session_start();
?>
<html><body><?php// 輸出上一頁面設置的會話變量echo "姓名: " . $_SESSION["username"] . "<br>";echo "年齡: " . $_SESSION["age"];?></body>
</html>

3、修改 PHP 會話變量

要更改會話變量,只需重寫它:

<?php
// 開始會話
session_start();
// 要更改會話變量,只需重寫它
$_SESSION["username"] = "李四";
$_SESSION["age"] = "25";

4、銷毀 PHP 會話

要刪除所有全局會話變量并銷毀會話,需使用?session_unset()?和?session_destroy()

session_unset:釋放所有的會話變量。

session_unset(): bool

session_unset() 會釋放當前會話注冊的所有會話變量。

返回值

成功時返回 true, 或者在失敗時返回 false。

session_destroy:銷毀一個會話中的全部數據。

session_destroy(): bool

返回值

成功時返回 true, 或者在失敗時返回 false。

示例

<?php
// 開始會話
session_start();
?>
<html><body><?php// 釋放所有會話變量session_unset();// 銷毀會話session_destroy();?></body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89042.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

11. JVM中的分代回收

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

基于PaddleOCR的營業執照識別與數據分析系統

基于PaddleOCR的營業執照識別與數據分析系統 1. 項目概述 本項目旨在利用百度PaddleOCR技術識別營業執照圖片中的關鍵信息,結合自然語言處理(NLP)和卷積神經網絡(CNN)對OCR結果進行分類處理,最后對識別出的收入流水數據進行深度分析與可視化展示。系統將實現從圖像識別到數…

SpringBoot JSON字典序列化翻譯

&#x1f9e9; 一、效果預期 Data public class UserVO {private String status;DictTranslate(type "user_status")private String statusName; }最終返回 JSON&#xff1a; {"status": "1","statusName": "啟用" }&#…

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一個WebUI自動化框架(5)失敗用例截圖與重試

在UI自動化測試用例執行過程中&#xff0c;經常會有很多不確定的因素導致用例執行失敗&#xff0c;比如網絡原因、環境問題等&#xff0c;所以我們有必要引入重試機制&#xff08;失敗重跑&#xff09;&#xff0c;來提高測試用例執行穩定性。準備工作&#xff1a;我們在進行失…

【Oracle】centos7靜默安裝oracle19c

靜默安裝三步驟&#xff1a; 1、數據庫安裝db_install.rsp&#xff08;數據庫軟件安裝響應文件&#xff09;2、配置監聽netca.rap&#xff08;監聽配置響應文件&#xff09;3、建庫dbca.rsp&#xff08;建庫響應文件&#xff09;安裝oracle19c先決條件準備&#xff1a; 1.檢查主…

MCP基礎知識二(實戰通信方式之Streamable HTTP)

介紹 MCP 使用 JSON-RPC 2.0 作為其傳輸格式。傳輸層負責將 MCP 協議消息轉換為 JSON-RPC 格式進行傳輸&#xff0c;并將接收到的 JSON-RPC 消息轉換回 MCP 協議消息。其中SSE被廢棄了&#xff08;Server-Sent Events (SSE) - Deprecated&#xff09; SSE as a standalone tra…

量子計算與AI的融合:開啟智能革命的“量子躍遷”新范式

當量子計算的并行算力與人工智能的深度學習能力相遇,一場顛覆傳統認知的技術革命正在醞釀。從藥物研發到自動駕駛,從金融風控到氣候預測,兩者的融合不僅突破了經典計算的算力天花板,更催生出全新的算法范式與產業生態。本文將深入解析量子計算與AI融合的技術邏輯、核心突破…

【氮化鎵】不同偏壓應力下電荷俘獲效應導致的P-GaN HEMT閾值電壓不穩定性

2022年12月7日,意大利國家研究委員會微電子與微系統研究所的Giuseppe Greco等人在《Applied Physics Letters》期刊發表了題為《Threshold voltage instability by charge trapping effects in the gate region of p-GaN HEMTs》的文章,基于對p-GaN高電子遷移率晶體管(HEMTs…

ONLYOFFICE深度解鎖系列.10-如何識別圖像和PDF掃描件中的文本?用ONLYOFFICE的AI OCR輕松搞定!

ONLYOFFICE 文檔版本 9.0帶來多項 AI 關鍵改進&#xff0c;顯著提升您處理電子表格和 PDF 文件的工作效率。本指南將重點介紹新增的 OCR 功能&#xff0c;并講解如何在 PDF 編輯器中利用 AI 助手將圖像轉為可編輯文本。什么是 OCR 文字識別&#xff1f;OCR 技術能夠掃描各類文檔…

單例模式詳解:確保一個類只有一個實例

在軟件開發中&#xff0c;設計模式是解決常見問題的經典方案。單例模式&#xff08;Singleton Pattern&#xff09;作為創建型設計模式中最簡單也最常用的一種&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。本文將全面探討單例模式的概念、多種實現方式…

Appdynamic 配置 PostgreSQL 收集器

配置 PostgreSQL 收集器 您可以使用數據庫可見性監控任何版本的 PostgreSQL。 連接詳細信息 部分場地描述創建新的收集器數據庫類型您想要監控的數據庫類型。代理人管理收集器的數據庫代理。收藏家姓名您想要用來識別收集器的名稱。連接詳細信息主機名或 IP 地址運行數據庫的機…

其他常見 HTTP 方法

除了最常用的四種方法&#xff08;GET、POST、PUT、DELETE&#xff09;&#xff0c;HTTP 協議還定義了一些較少使用但非常有用的請求方法&#xff0c;常用于調試、部分更新、跨域預檢等場景。1. HEAD 方法&#xff1a;獲取響應頭 特點&#xff1a; 用途&#xff1a;與 GET 類似…

Web應用防火墻(WAF)技術

目錄 一&#xff1a;簡介 1.1 Web安全現狀 1.2 傳統防御的局限性 二&#xff1a;Web應用防火墻技術解析 2.1 WAF核心架構 2.2 關鍵技術特性 三&#xff1a;WAF必要性 3.1 典型防護場景 3.2 與傳統方案對比 四&#xff1a;進階防護方案 4.1 智能WAF架構 4.2 關鍵技術…

機器學習之線性回歸(七)

機器學習之線性回歸&#xff08;七&#xff09; 文章目錄機器學習之線性回歸&#xff08;七&#xff09;一、線性回歸線性回歸超全指南&#xff1a;從“一條直線”到“正則化調參”的完整旅程0. 先對齊語言&#xff1a;標稱型 vs 連續型1. 問題形式化2. 損失函數全景3. 求解方法…

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的用戶價值引導與核心用戶沉淀策略研究

摘要&#xff1a;在數字化商業生態中&#xff0c;用戶留存與核心用戶培育是產品成功的關鍵。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序源碼的協同應用&#xff0c;探討如何通過技術賦能實現用戶價值引導與核心用戶沉淀。研究結合工業品供應鏈、美妝品牌、健康食品行業…

課題申報書成功率提升85%!借助大模型AI精準選題、搭綜述框架及提煉創新點(附實操AI提示詞)

大家好,感謝關注。我是七哥,一個在高校里不務正業,折騰用大模型AI實操的學術人。可以添加七哥(qige500)交流學術寫作或ChatGPT、Claude等學術大模型AI領域相關問題,多多交流,相互成就,共同進步。 寫一份高質量的課題申報書往往面臨許多困難,對很多同仁來說,難就難在…

Spring之【寫一個簡單的IOC容器EasySpring】

目錄 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定義信息 EasyBeanDefinition 管理Bean定義信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium動態網頁爬蟲編寫與解釋

使用Selenium來抓取動態網頁。動態網頁通常是指那些通過JavaScript動態加載內容的網頁&#xff0c;這些內容在初始HTML中并不存在&#xff0c;因此使用傳統的requests庫無法獲取到這些動態生成的內容。Selenium可以模擬瀏覽器行為&#xff0c;等待JavaScript執行并渲染頁面&…

element el-table中使用el-image圖片預覽被其他表格遮擋

或者::v-deep .el-table__cell {position: static !important;}

MyBatis與Spring整合優化實戰指南:從配置到性能調優

一、SqlSessionFactory配置最佳實踐 1.1 數據源配置優化 <!-- Spring配置示例 --> <bean id"dataSource" class"com.zaxxer.hikari.HikariDataSource" destroy-method"close"><property name"driverClassName" value&q…