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

CodeIgniter Cookie Helper 完整使用指南:封裝基類實現統一存取

     編輯:PHP 相關知識

CI 三種 Cookie 操作方式對比

方式類別特點
Input 類$this->input->cookie()僅讀取,自動過濾 XSS,不支援寫入
Response 類 (CI3+)$this->response->set_cookie()物件導向,支援 SameSite、HttpOnly、Secure 完整屬性
Cookie Helperset_cookie()/get_cookie()函數式,輕量,舊專案常用,本文重點介紹

Cookie Helper 基礎用法

$this->load->helper('cookie');

// 寫入
set_cookie('user_id', 12345, 86400); // 名稱、值、過期秒數
// 完整參數
set_cookie([
  'name'   => 'token',
  'value'  => 'abc123',
  'expire' => 3600,
  'domain' => '.example.com',
  'path'   => '/',
  'prefix' => 'app_',
  'secure' => TRUE,    // 僅 HTTPS
  'httponly' => TRUE,  // JS 不可讀
  'samesite' => 'Lax'  // CI 3.1.10+
]);

// 讀取
$uid = get_cookie('user_id'); // 自動處理 prefix

// 刪除
delete_cookie('user_id'); // 實際設定 expire 為過去時間

基類控制器封裝統一介面

class MY_Controller extends CI_Controller {
  protected function saveCookie($name, $value, $expire = 86400) {
    $this->load->helper('cookie');
    set_cookie($name, $value, $expire);
  }

  protected function getCookie($name) {
    $this->load->helper('cookie');
    return get_cookie($name);
  }

  protected function delCookie($name) {
    $this->load->helper('cookie');
    delete_cookie($name);
  }
}

// 子類使用
class Auth extends MY_Controller {
  public function login() {
    // 驗證通過後
    $this->saveCookie('user_info', json_encode($user), 3600*24*7);
    redirect('dashboard');
  }

  public function dashboard() {
    $user = json_decode($this->getCookie('user_info'), true);
    if (!$user) redirect('login');
    $this->load->view('dashboard', ['user' => $user]);
  }
}

生產環境安全加固清單

  1. 全站 HTTPS + Secure 標記:$config['cookie_secure'] = TRUE; (CI3 配置文件)
  2. HttpOnly 防 XSS:$config['cookie_httponly'] = TRUE;
  3. 3. SameSite=Lax/Strict:防禦 CSRF,CI 3.1.10+ 原生支援 4. 域名範圍最小化:$config['cookie_domain'] = '.example.com'; 避免子域名洩露 5. 前綴隔離:$config['cookie_prefix'] = 'app_'; 多系統共域名時避免衝突 6. 敏感數據加密:Cookie 值建議用 openssl_encrypt 或 CI encryption 加密存儲

常見問題排查

現象原因解決
get_cookie 返回空域名/路徑/前綴不匹配檢查瀏覽器開發工具 Application → Cookies 實際屬性
Ajax 請求不攜帶 Cookie跨域未設 withCredentials: true 或 SameSite=Strict前端 xhrFields: {withCredentials: true},後端 SameSite=Lax
刪除後仍存在路徑/域名不一致導致瀏覽器不識別為同一 Cookiedelete_cookie 時傳遞相同 path/domain/prefix

統一封裝至基類、配置安全屬性、善用瀏覽器開發工具調試,是 CI 專案 Cookie 管理的標準化路徑。

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