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

Yii 框架 Session 使用全攻略:原生 $_SESSION 與 Yii::app()->session 混用指南

     編輯:PHP 綜合知識

Yii 封裝了 CHttpSession 組件,默認 autoStart=true,無需手動 session_start()。本文涵蓋基礎讀寫、配置自定義存儲(文件/數據庫)、Session ID 獲取、銷毀流程。

核心差異:Yii vs 原生 PHP

  • 原生 PHP:需手動 session_start() 才能使用 $_SESSION。
  • Yii:autoStart=true 時自動啟動,**直接使用 Yii::app()->session** 即可,底層已調用 session_start()。
  • 仍可直接操作 $_SESSION 全局變量,但建議統一用組件方式,便於遷移存儲引擎。

基礎讀寫操作

// 設置
Yii::app()->session['var'] = 'value';

// 讀取
echo Yii::app()->session['var'];

// 刪除單個
unset(Yii::app()->session['var']);

// 判斷存在
isset(Yii::app()->session['var'])

高級配置:protected/config/main.php

'components' => array(
    'session' => array(
        'autoStart' => true,           // 是否自動啟動
        'sessionName' => 'MyAppSess',  // 自定義 Cookie 名(默認 PHPSESSID)
        'cookieMode' => 'only',        // 只用 Cookie 傳輸 SID,禁用 URL 透傳
        'savePath' => '/var/lib/php/session', // 文件存儲目錄(需可寫)
        'timeout' => 1800,             // 30 分鐘過期(秒)
    ),
),

將 Session 存入數據庫(CDbHttpSession)

'session' => array(
    'class' => 'system.web.CDbHttpSession',
    'connectionID' => 'db',              // 數據庫連接組件 ID
    'sessionTableName' => 'yii_session', // 表名(需預建表)
),

建表 SQL(MySQL):

CREATE TABLE `yii_session` (
    `id` CHAR(32) NOT NULL PRIMARY KEY,
    `expire` INT(11) NOT NULL,
    `data` BLOB NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

調試與銷毀

// 獲取當前 Session ID
$sessionId = Yii::app()->session->sessionID;

// 用戶登出:清空數據並銷毀服務端存儲
Yii::app()->session->clear();   // 刪除所有 $_SESSION 變量
Yii::app()->session->destroy(); // 刪除服務端 Session 文件/數據庫記錄

最佳實踐提醒

  • 生產環境**務必設置 savePath** 到專用目錄,避免系統 /tmp 被清理導致 Session 丟失。
  • 多台服務器集群**必須使用數據庫/Redis/Memcached 共享 Session**,禁用文件存儲。
  • cookieMode => 'only' 防止 SID 暴露在 URL 中(安全加分項)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved