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

Yii 框架登入流程深度分析

     編輯:PHP 相關知識

Yii 框架登入流程深度分析

本文詳細剖析 Yii 框架的登入機制,涵蓋 Session、Cookie 管理與使用者驗證的核心邏輯。

1. 概述

Yii 是全棧式 MVC 框架,內建 MVC、ORM、快取、國際化、jQuery 整合、RBAC 權限控制、骨架產生器、輸入驗證、Widget、事件、主題、Web Service、日誌等功能。

2. 網站登入流程

預設由 SiteController::actionLogin() 處理:

public function actionLogin() {
    $model = new LoginForm;
    if (isset($_POST['LoginForm'])) {
        $model->attributes = $_POST['LoginForm'];
        if ($model->validate() && $model->login()) {
            $this->redirect(Yii::app()->user->returnUrl);
        }
    }
    $this->render('login', array('model' => $model));
}

流程:初始化 LoginForm → 驗證輸入 → 呼叫 login() → 成功則導向原頁,否則顯示登入表單。

3. 框架核心登入邏輯

LoginForm::login() 建立 UserIdentity 並呼叫 authenticate() 驗證帳密。成功後呼叫 Yii::app()->user->login()(即 CWebUser::login())。

CWebUser::login() 核心程式碼:

public function login($identity, $duration = 0) {
    $this->changeIdentity($identity->getId(), $identity->getName(), $identity->getPersistentStates());
    if ($duration > 0) {
        if ($this->allowAutoLogin)
            $this->saveToCookie($duration);
        else
            throw new CException(...);
    }
}

saveToCookie() 會建立加密 Cookie,包含使用者 ID、名稱、過期時間與自訂狀態,並透過 CSecurityManager::hashData() 產生 HMAC 雜湊防止竄改。

4. Cookie 驗證機制

Cookie 值由 hashData() 產生:HMAC + 原始資料。伺服器收到 Cookie 時,重新計算 HMAC 比對,確保資料完整性。驗證金鑰儲存在 runtime/state.bin,全站統一。

完整流程包含:Session 建立、Cookie 加密儲存、後續請求自動驗證,確保登入狀態安全持久。

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