1. 程式人生 > >PHP 會話控制 cookie與session 全解析

PHP 會話控制 cookie與session 全解析

Cookie 簡介

  1. Cookie是儲存在客戶端瀏覽器中的資料,我們通過Cookie來跟蹤與儲存使用者資料。

  2. 一般情況下,Cookie通過HTTP headers從服務端返回到客戶端。多數web程式都支援Cookie的操作,因為Cookie是存在於HTTP的標頭之中,所以必須在其他資訊輸出以前進行設定,類似於header函式的使用限制。

  3. PHP通過 setcookie 函式進行Cookie的設定,任何從瀏覽器發回的Cookie,PHP都會自動的將他儲存在 $_COOKIE 的全域性變數之中,因此我們可以通過 $_COOKIE[‘key’] 的形式來讀取某個Cookie值。

  4. PHP中的Cookie具有非常廣泛的使用,經常用來儲存使用者的登入資訊,購物車等,且在使用會話Session時通常使用Cookie來儲存會話id來識別使用者,Cookie具備有效期,當有效期結束之後,Cookie會自動的從客戶端刪除。同時為了進行安全控制,Cookie還可以設定域跟路徑。

setcookie('test', time());

ob_start(); // 開啟輸出控制緩衝
print_r($_COOKIE); 

$content = ob_get_contents(); // 複製緩衝區內容到$content中
$content = str_replace(" ", ' ', $content);

// 清空(擦掉)輸出緩衝區
ob_clean();

header("content-type:text/html; charset=utf-8");

echo '當前的Cookie為:<br>';
echo nl2br($content
); // nl2br 在字串所有新行之前插入 HTML 換行標記 <br>

setcookie()

setcookie() 函式向客戶端傳送一個 HTTP cookie。cookie 是由伺服器傳送到瀏覽器的變數。

註釋:可以通過 $_COOKIE[“user”] 來訪問名為 “user” 的 cookie 的值。

setrawcookie()

PHP中還有一個設定Cookie的函式setrawcookie

setrawcookie跟setcookie基本一樣,唯一的不同就是value的值不會自動進行 URL 編碼,因此在需要的時候要手動的進行urlencode。

setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365); 

header()

因為Cookie是通過HTTP標頭進行設定的,所以也可以直接使用header方法進行設定。

header("Set-Cookie:cookie_name=value");

刪除 Cookie

在PHP中刪除cookie也是採用 setcookie 函式來實現。

原理:將cookie的過期時間設定到當前時間之前,則該cookie會自動失效,也就達到了刪除cookie的目的。

setcookie('test', '', time()-1); 

也可以直接通過header來刪除cookie。

header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));

Cookie 的有效路徑

cookie 中的路徑用來控制設定的cookie在哪個路徑下有效,預設為’/’,在所有路徑下都有。

// 使test在/path以及子路徑/path/abc下都有效,但是在根目錄下就讀取不到test的cookie值。
setcookie('CookieName', 'CookieValue', time() + 3600, '/path');

session與cookie的異同

cookie將資料儲存在客戶端,建立起使用者與伺服器之間的聯絡,通常可以解決很多問題,但是cookie仍然具有一些侷限:

  1. cookie相對不是太安全,容易被盜用導致cookie欺騙

  2. 單個cookie的值最大隻能儲存4k,每次請求都要進行網路傳輸,佔用頻寬

  3. 使用者資訊既可以儲存在sessioin中,也可以儲存在cookie中,他們之間的差別在於session可以方便的存取多種資料型別,而cookie只支援字串型別,同時對於一些安全性比較高的資料,cookie需要進行格式化與加密儲存,而session儲存在服務端則安全性較高。

session 簡介

  1. session是將使用者的會話資料儲存在服務端,沒有大小限制

  2. 通過一個session_id進行使用者識別,PHP預設情況下session id是通過cookie來儲存的,因此從某種程度上來說,seesion依賴於cookie。

  3. 但這不是絕對的,session id也可以通過引數來實現,只要能將session id傳遞到服務端進行識別的機制都可以使用session。

// 建立一個 session
session_start();
$_SESSION['sessionName'] = 'sessionValue';
echo "session_id:".session_id(); // 顯示當前的session_id
echo "<br>";

// 讀取 session 的值
echo $_SESSION['sessionName'];

//銷燬一個session
unset($_SESSION['sessionName']);
echo "<br>";
var_dump($_SESSION);

session會自動的對要設定的值進行encode與decode,因此session可以支援任意資料型別,包括資料與物件等。

session_start();
$_SESSION['ary'] = array('name' => 'jobs');
$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);

// unset($_SESSION['ary']);
// unset($_SESSION['obj']);

刪除 session

刪除某個session值可以使用 unset() 函式

如果要刪除所有的session,可以使用 session_destroy() 函式,但是 session_id 仍然存在。

值得注意的是,session_destroy() 並不會立即的銷燬全域性變數SESSION_SESSION才為空,因此如果需要立即銷燬$_SESSION,可以使用unset函式。

擴充套件:

預設情況下,session是以檔案形式儲存在伺服器上的,因此當一個頁面開啟了session之後,會獨佔這個session檔案,這樣會導致當前使用者的其他併發訪問無法執行而等待。可以採用快取或者資料庫的形式儲存來解決這個問題

如果需要銷燬session_id,通常在使用者退出的時候可能會用到,則還需要顯式的呼叫setcookie方法刪除session_id的cookie值。

綜合案例 - 儲存使用者的登入資訊


// 建立 session
session_start();

//假設使用者登入成功獲得了以下使用者資料
$userinfo = array(
    'uid'  => 10000,
    'name' => 'spark',
    'email' => '[email protected]',
    'sex'  => 'man',
    'age'  => '18'
);

header("content-type:text/html; charset=utf-8");

// 將使用者資訊儲存到session中
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['name'] = $userinfo['name'];
$_SESSION['userinfo'] = $userinfo;

// 將使用者資料儲存到cookie中的一個簡單方法 -- 加密
$secureKey = 'imooc'; //加密金鑰
$str = serialize($userinfo); //將使用者資訊序列化
$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));
echo "加密後的使用者資訊:<br>";
print_r($str . '<br>');

//將加密後的使用者資料儲存到cookie中
setcookie('userinfo', $str);

// 當需要使用時進行 -- 解密
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), base64_decode($str), MCRYPT_MODE_ECB);
$uinfo = unserialize($str);
echo "解密後的使用者資訊:<br>";
print_r($uinfo);

相關推薦

PHP 會話控制 cookiesession 解析

Cookie 簡介 Cookie是儲存在客戶端瀏覽器中的資料,我們通過Cookie來跟蹤與儲存使用者資料。 一般情況下,Cookie通過HTTP headers從服務端返回到客戶端。多數web程式都支援Cookie的操作,因為Cookie是存在於HTTP的標

Java web 會話技術 cookiesession

問題 一起 一個 http協議 規範 再次 然而 交互 http請求 一.會話 會話可簡單理解為:用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。 會話過程中要解決的一些問題 每個用戶在使用瀏覽器與服務器進行會話的過程中,

綜述PHP中的CookieSession機制

Web應用程式是使用HTTP協議傳輸資料的。HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線。這就意味著伺服器無法從連線上跟蹤會話。即使用者A購買了一件商品放入購物車內,當再次購買商品時伺服器已經無法判斷該購買行為是

PHP-會話控制-Session

art src iso 代碼 cookie ray test 會話控制 建立 1.什麽是Session   上一節我們討論到將數據以cookie的形式保存在客戶端有很多弊端。為了解決這些問題就有了Session。   Session是以文件的形式保存在服務器端的數據。   

PHPCookieSession的異同以及使用

重寫 不容易 包含 ron pat 指示 修改表 持久 pri Cookie與Session的異同: 一、cookie機制 Cookies是服務器在本地機器上存儲的小段文本並隨每一個請求發送至同一個服務器。IETF RFC 2965 HTTP State Managemen

PHP會話控制之失效時間過期回收機制

gutops session生命周期 php會話控制 session過期回收機制 sessions失效時間 PHP會話控制之失效時間與過期回收機制 session的生命周期 從session的初始化開始,直到註銷的這段時間稱之為sesssion生命周期。 設置session生命周期再php

深入淺出,解析cookiesession

修改配置文件 必須 變量 刪除數據 persist 頁面設置 丟了 域名 會話 一、session和cookie的特征 很多人認為,session是服務端的,cookie是客戶端的。其實呢,session和cookie都是服務器產生的,都是鍵值對應的。 ** sessi

07.會話跟蹤技術cookiesession

one 就會 獨立 () efault ssi 技術 style 用戶 會話跟蹤技術cookie與session 01.會話跟蹤:會話路徑技術使用Cookie或session完成:   我們知道HTTP協議是無狀態協議,也就是說每個請求都是獨立的!   無法記錄前一次請求的

HTTP會話保持技術CookieSession

摘要:本文介紹Cookie與Session原理,對於Cookie與Session的屬性詳情和其他擴充套件不做探討。必須的前導知識:HTTP協議原理。 一、HTTP協議的缺陷——無狀態 因為HTTP1.0被設計成是基於TCP協議的短連線,即完成一次“請求-應答”之後會斷開連線。所以,伺服器接到一次HTTP請

PHP強化之14 - cookiesession

一、會話 在講理Cookie與Session之前,寫這裡先引入一個叫做會話的概念。 在計算機術語中,會話是指一個終端使用者與互動系統進行通訊的過程,比如從輸入賬戶密碼進入作業系統到退出作業系統就是一個會話過程。會話較多用於網路上,TCP的三次握手就建立了一個會話,TCP關閉連線就

會話(狀態)管理CookieSession(一)

會話(狀態)管理Cookie與Session(一) 目錄 什麼是會話? 儲存會話狀態的兩種技術 Cookie應用 a.Cookie執行原理 b.建立Cookie 什麼是會話 會話可以簡單的理解為:使用者開啟瀏覽器訪問了多個資源,然後關閉瀏覽器。整個過程稱之

深入淺出剖析COOKIESESSION(基於PHP

很多剛入門的小夥伴,可能對於cookie跟session都不會陌生,但是覺得這兩個東西很相似,但不知道該如何去區分跟使用,雖然兩者有很多相似之處,但是兩者又有不少區別,這裡給小夥伴們講解一下,供大家學習分享,少走彎路。轉帖請註明,侵刪。 共同點:session跟cookie都是伺服器用於持久

CookieSession的工作原理解析

cookie和session大家一定不會陌生,至少大家都會知道cookie與session最簡單的區別:cookie是存在客戶端即瀏覽器端的,session是儲存在伺服器端的。作者最近在實習當中使用到了session和cookie,有一點小感觸,記錄下來與大家一起學習。 1

PHP CookieSession的使用區別

Cookie與Session Cookie和session是目前使用的兩種儲存機制。 cookie是從一個WEB頁到下一個WEB頁面的資料傳送方法,cookie儲存在客戶端。 Session是讓資料在頁面中持續有效的一個傳遞方法,session儲存在伺服器端。 掌握了coo

7.PHP CookieSession

Cookie與Session Cookie Cookie功能 建立cookie <?PHPsetcookie("TMCookie" ,'www.baidu.com');setcookie(

淺析PHPcookiesession技術

1.cookie是什麼? cookie指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。 通俗來理解就是,你去一個專賣店或者超市買東西,然後店裡給你辦一張會員卡,以後你的身份和購買資訊都存在這個卡里,而這個卡放你身上。之後每

Python3之cookiesession會話技術

會話技術的由來: 由於http是無狀態的,很多網站需要識別登入進來的使用者身份,以備下次直接登入或者區分是哪個使用者登入的,這樣可以根據不同的使用者展示不同的資訊,這樣就需要一種技術來儲存使用者的狀態

CookieSession

splay 器) 簡化 技術 本質 ear 服務 默認 緩存 1、Cookie 介紹 Cookie是由服務器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該C

cookiesession的區別

分析 單個 session strong 使用 占用 安全性 服務器性能 存在 Cookie與session的區別;     01,Cookie的數據存放在客戶的瀏覽器上;session的數據存放在服務器上     02,Cookie不是很安全,別人可以分析存放在本地的co

Cookiesession區別

瀏覽器 cookie 通信設備 session與Cookie的區別此文章 來自烏龜運維wuguiyunwei.comQQ群:602183872主要區別:Cookie,也稱為HTTP cookie,Web cookie或瀏覽器cookie,是從網站發送到服務器並存儲在用戶的Web瀏覽器中的一小部分數