Cookie & Session【會話管理與控制】
用現實生活 類比Cookie 和 Session :
兩個關於開會的故事:
-
在幾十年前人們開會的時候,都需要帶上一個參會證。這個參會證上有這個人的職務、姓名、單位、照片等信息。在開會的時候,會議安保人員、組織者只需要檢查相關信息就行了。(個人信息,由自己攜帶)
-
幾十年後,越來越先進了。你參會前,會給你發一個卡片或者工牌。這個卡片上有一個唯一的號碼。拿到號碼,再用攝像頭掃一掃即可完成你的個人信息核對。(個人信息,由會議主辦方的數據庫保存)
在電腦裏面也有這兩種驗證方式:
-
人們在參會證上寫著所有的相關信息,這種會話方式我們叫做cookie。這種模式,信息是保存在用戶電腦上(客戶端)的。
-
人們只需要帶一個卡片或者磁卡,通過這個卡片去驗證你的照片、姓名等信息的方式,我們叫做session。它只在用戶本地存一組小小的值,其他信息全是存在服務器上的。
總結:數據存儲在自己身上,這是Cookie; 數據存儲在別人那裏,我只有一個門卡,這是Session。
什麽是會話?
即客戶端和服務器之間的對話過程。
HTTP協議是無狀態的。何謂無狀態?你輸入我的網址,我就給你傳送數據,我可不管你是誰。
而我們在現實情況中,服務器往往需要知道你是誰?這就需要用到cookie和session會話技術了。
它們都分別存儲在哪裏?
Cookie是通過將數據保存在客戶端來實現與服務端保持連接的,而Session是通過將數據保存在服務器端來實現保持連接的。
Cookie存在哪兒?
Cookie的本質是一小段數據,一小段存儲在你電腦硬盤中的數據。
Domain代表的是cookies所屬的網站,Name代表的是這個Cookie的名字,Value代表的是Cookie的值,Expires代表的是這個Cookie的有效期。
Session存儲在哪裏?
在php.ini配置文件中有這麽一行 session.save_handler = files, files,說明了php默認的是用文件讀寫的方式來保存session的。
使用Cookie
1、如何向Cookie中添加數據? 使用 setcookie()函數。
bool setcookie (string $名字[, string $值][, int $過期時間 = 0][, string $路徑][, string $域名][, bool $安全 = false][, bool $http只讀 = false]);
參數說明:
$名字 必需。規定 cookie 的名稱。
$值 可選。規定 cookie 的值。
$有效期 可選。規定 cookie 的有效期。
$路徑 可選。規定 cookie 的服務器路徑。
$域名 可選。規定 cookie 的域名。
$安全 可選。規定是否通過安全的 HTTPS 連接來傳輸 cookie。
$http安讀 可選。如果true,那麽js就無法讀取改cookie,增加安全性。
常用三個參數: setcookie(cookie名,cookie值,cookie有效期);
2、如何從Cookie中讀取數據?
在服務端,通過$_COOKIE[‘name‘] 來讀取cookie中的數據。
特別註意:我們一般是不會把用戶名和密碼放到cookie中的,因為這並不安全,容易泄露自己的信息。務必註意:重要的信息不要放到cookie中。
使用Session
1、無論向session中添加數據,還是從session中銷毀數據,都需要先開啟Session:
session_start(); 這個函數無須參數,它用於開啟Session。
2、如何向session中添加數據?
$_SESSION[‘userName‘] = ‘wang‘; 這是添加數據的語法。
3、如何從session中讀取數據?
$userName = $_SESSION[‘userName‘]; 這是讀取數據的語法。
4、如何銷毀session中的數據?(有多種方式)
銷毀數據之前,也需要先開啟Sesson。
方式1) unset($_SESSION[‘XXX‘]);
它用於銷毀session中的 XXX 變量。
警告:請不要 unset($_SESSION); 這會導致後續無法使用$_SESSION這個變量了。
方式2) 把空數組賦值給$_SESSION變量 $_SESSION = array();
$_SESSOIN變量是個數組,那麽空數組賦值的話也是相當於將當前會話的$_SESSION變量中的值銷毀。
方式3) session_destory();
這個函數會銷毀當前會話中的全部數據,並結束當前會話。但是不會重置當前會話所關聯的全局變量, 也不會重置會話 cookie。
Cookie & Session【會話管理與控制】