南沙網(wǎng)站建設(shè)wwiw搜索引擎外部鏈接優(yōu)化
PHP(14)會話技術(shù)
- 一、概念
- 二、分類
- 三、cookie技術(shù)
- 1. cookie的基本使用
- 2. cookie的生命周期
- 3. cookie的作用范圍
- 4. cookie的跨子域
- 5. cookie的數(shù)組數(shù)據(jù)
- 四、session
- 1. session原理
- 2. session基本使用
- 3. session配置
- 4. 銷毀session
一、概念
HTTP協(xié)議是一種無狀態(tài)、無連接的協(xié)議,無法判斷多個請求是否來自同一個用戶。會話技術(shù)就是讓HTTP協(xié)議識別來自同一個用戶的多個請求。
二、分類
- cookie:是在HTTP協(xié)議下,服務(wù)器或腳本可以維護客戶工作站上信息的一種方式。本質(zhì)是由Web服務(wù)器保存在客戶端上的小文本文件,可以包含有關(guān)用戶的信息。
- session:session技術(shù)是將數(shù)據(jù)保存在服務(wù)器端,session技術(shù)的實現(xiàn)依賴于cookie技術(shù)。
- 區(qū)別
區(qū)別 | cookie | session |
---|---|---|
安全性 | 存儲在瀏覽器端,安全性低 | 存儲在服務(wù)器,安全性高 |
數(shù)據(jù)大小 | 數(shù)量和大小都有限制(4KB) | 數(shù)據(jù)存儲不限 |
可用數(shù)據(jù)類型 | 只能存儲簡單數(shù)據(jù),數(shù)值、字符串 | 可以存儲復(fù)雜數(shù)據(jù) |
三、cookie技術(shù)
setcookie(名字, 值, 生命周期, 作用范圍, 域名);
1. cookie的基本使用
- 設(shè)置cookie信息:setcookie(名字, 值)
- 名字必須是字符串。
- 值必須是簡單類中的整數(shù)或字符串。
setcookie('age', 1);
- 讀取cookie信息:$_COOKIE
var_dump($_COOKIE);
2. cookie的生命周期
- 默認(rèn)關(guān)閉瀏覽器則生命周期結(jié)束。
- 通過setcookie可以限定生命周期(必須加 time()):
setcookie("a1", 'a1', time() + 7 * 24 * 60 * 60);
- 手動結(jié)束生命周期:
setcookie('age', '');
、setcookie("a1", 'a1', time());
3. cookie的作用范圍
- 默認(rèn)范圍:上層文件夾中設(shè)定的cookie可以在下層中訪問,而下層的cookie不能在上層訪問。
- 把cookie的作用范圍設(shè)置為網(wǎng)站根目錄:
setcookie('a1', 'a1', 0, '/');
4. cookie的跨子域
- 默認(rèn)不允許跨域訪問cookie。
- 設(shè)置cookie跨子域:
setcookie('a1', 'a1', 0, '/', 'mysite.com');
5. cookie的數(shù)組數(shù)據(jù)
- cookie只能設(shè)置成簡單數(shù)據(jù)類型。
- 把cookie偽裝成數(shù)組:
setcookie('goods_id[0]', 1);
setcookie('goods_id[1]', 2);
setcookie('goods_id[2]', 3);
setcookie('goods_id[3]', 4);
- 獲取cookie數(shù)組:
$_COOKIE['goods_id'][2]
四、session
1. session原理
- session與瀏覽器無關(guān),但與cookie有關(guān)。
- PHP碰到session_start()時開啟session會話,會自動檢測sessionID
- 如果cookie中存在,則使用現(xiàn)成的。
- 如果cookie中不存在,會創(chuàng)建一個sessionID,并通過響應(yīng)頭以cookie形式保存到瀏覽器中。
- 初始化超全局變量$_SESSION為一個空數(shù)組
- PHP通過sessionID去指定存放session文件的位置匹配對應(yīng)的文件
- 不存在該文件,則創(chuàng)建一個sessionID命名文件
- 存在該文件,讀取文件內(nèi)容,將數(shù)據(jù)存儲到$_SESSION中
- 腳本執(zhí)行結(jié)束,將$_SESSION中保存的所有數(shù)據(jù)序列化存儲到sessionID對應(yīng)的文件中。
- PHP碰到session_start()時開啟session會話,會自動檢測sessionID
2. session基本使用
- $_SESSION是通過session_start()函數(shù)的調(diào)用才會定義的,不會直接定義。
- 設(shè)置session和讀取session
<?php
// 開啟session
session_start();
// 設(shè)置session
$_SESSION['name'] = 'Mark';
$_SESSION['hobby']=array('sing', 'dump');
// 讀取session
var_dump($_SESSION);
- 刪除一個session
unset($_SESSION['name']);
- 刪除所有session
$_SESSION = array();
3. session配置
- 配置方式
- 在php.ini中配置,全局生效
- 腳本中配置,PHP可以通過
ini_set()
函數(shù)來設(shè)置項目配置
- 基礎(chǔ)配置
- session.name:session名字,保存到cookie中sessionID對應(yīng)的名字
- session.auto_start:自動開啟session,默認(rèn)關(guān)閉
- session.save_handler:session數(shù)據(jù)的保存方式,默認(rèn)是文件形式
- session.save_path:session文件默認(rèn)存儲位置
- 常用配置
- session.cookie_lifetime:PHPsessionID在瀏覽器端對應(yīng)cookie的生命周期,默認(rèn)是會話結(jié)束
- session.cookie_path:sessionID在瀏覽器存儲之后允許服務(wù)器訪問的路徑(cookie作用范圍)
- session.cookie_domain:cookie允許訪問的子域
- 垃圾回收配置
- session.gc_maxlifetime:規(guī)定session文件的最大生命周期,默認(rèn)24分鐘。
- session.gc_probability:垃圾回收概率因子,默認(rèn)為1
- session.gc_divisor:垃圾回收概率分母,默認(rèn)為1000
- 觸發(fā)幾率默認(rèn)是 1/1000
4. 銷毀session
$_SESSION = array();
只會刪除數(shù)據(jù)。銷毀session會刪除session對應(yīng)的文件。- 通過
session_destroy()
函數(shù)來銷毀session。