首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Cookies 操作類完整實作與應用指南

     編輯:PHP 綜合知識

前言

在 PHP 開發中,Cookie 是實現用戶狀態保持、個性化設定等功能的核心機制。雖然 PHP 內建了 setcookie() 與 $_COOKIE 超全域變數,但在實際專案中往往需要更完善的功能:資料加密、自動序列化、前綴管理、過期時間控制等。本文將詳細介紹一個功能完整的 Cookies 類別,並提供實際應用範例。

核心功能特色

  • 完整的 CRUD 操作:支援設定、讀取、更新、清除 Cookie 資料
  • 靈活的前綴機制:避免多系統共用域名時的名稱衝突
  • 強制過期控制:支援預設與單獨設定過期時間
  • 多樣化資料型別:字串、陣列、物件皆可直接存取
  • 內建加密保護:採用自定義 authcode 演算法保障資料安全

類別架構解析

核心屬性

private $_prefix = '';        // Cookie 名稱前綴
private $_securekey = '...';  // 加密金鑰
private $_expire = 3600;      // 預設過期秒數(1小時)

建構子與設定方法

建構子允許一次性配置前綴、過期時間與金鑰:

public function __construct($prefix='', $expire=0, $securekey='') {
    if (is_string($prefix) && $prefix!='') $this->_prefix = $prefix;
    if (is_numeric($expire) && $expire>0) $this->_expire = $expire;
    if (is_string($securekey) && $securekey!='') $this->_securekey = $securekey;
}

亦提供 setPrefix()、setExpire() 供執行期動態調整。

資料封裝與解封裝

採用 JSON 格式封裝資料與過期時間戳:

private function pack($data, $expire) {
    if ($data==='') return '';
    return json_encode(['value' => $data, 'expire' => $expire]);
}

private function unpack($data) {
    if ($data==='') return ['', 0];
    $cookie_data = json_decode($data, true);
    if (isset($cookie_data['value'], $cookie_data['expire']) && time() < $cookie_data['expire']) {
        return [$cookie_data['value'], $cookie_data['expire']];
    }
    return ['', 0];
}

加密/解密核心

authcode() 採用經典的 Discuz! 風格對稱加密演算法,支援 ENCODE/DECODE 雙模式,包含隨機金鑰、時間戳驗證、資料完整性校驗等機制,有效防範竄改與重放攻擊。

實戰應用範例

基本操作流程

require 'Cookies.class.php';

$type = isset($_GET['type']) ? strtolower($_GET['type']) : '';
if (!in_array($type, ['set','get','update','clear'])) exit('type not exists');

$obj = new Cookies('member', 10); // 前綴 member,預設 10 秒過期

switch ($type) {
    case 'set':
        $data = ['name' => 'fdipzone', 'gender' => 'male'];
        $obj->set('me', $data, 5); // 覆蓋預設,設為 5 秒
        echo 'set cookies';
        break;

    case 'get':
        $result = $obj->get('me');
        echo '
'; print_r($result); echo '
'; echo 'get cookies'; break; case 'update': $data = ['name' => 'angelababy', 'gender' => 'female']; $flag = $obj->update('me', $data); echo $flag ? 'update cookies success' : 'update cookies false'; break; case 'clear': $obj->clear('me'); echo 'clear cookies'; break; }

進階使用技巧

  1. 物件直接存儲:$obj->set('user', $userObject); 會自動序列化
  2. 跨子域共享:設定 setcookie 第 5 參數 domain 需自行擴展類別
  3. HttpOnly 與 Secure:生產環境建議修改 set() 方法加入第 6、7 參數

原始碼完整下載

本文完整實例源碼點擊此處本站下載

總結

此 Cookies 類別解決了原生操作的諸多痛點,特別是加密、序列化、前綴管理三大實用功能,可直接投入生產環境。開發者可根據專案需求擴展 HttpOnly、SameSite 等現代 Cookie 屬性,進一步提升安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved