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

ThinkPHP 登錄功能實現:基於 Session 的用戶認證流程

     編輯:PHP 相關知識

ThinkPHP 登錄功能實現:基於 Session 的用戶認證流程

用戶登錄是 Web 開發中的基礎功能。本文以 ThinkPHP 為例,演示註冊成功後自動登錄並顯示歡迎信息的完整實現流程,核心圍繞 Session 的寫入、判斷與讀取。

第一步:配置認證鍵名

在 config.php 中定義 Session 鍵名常量:

'USER_AUTH_KEY' => 'authId'

完整配置示例:

<?php
if (!defined('THINK_PATH')) exit();
return array(
    'DB_TYPE'   => 'mysql',
    'DB_HOST'   => 'localhost',
    'DB_NAME'   => 'myuser',
    'DB_USER'   => 'root',
    'DB_PWD'    => '',
    'DB_PORT'   => '3306',
    'DB_PREFIX' => 'think_',
    'USER_AUTH_KEY' => 'authId'
);

第二步:註冊成功後寫入 Session

在 AdminAction.class.php 的 insert() 方法中,驗證通過後存入用戶名:

public function insert() {
    header('Content-Type:text/html; charset=utf-8');
    $user = $_POST['user'];
    $this->verifyCheck();
    
    $Pagemodel = D("user");
    $vo = $Pagemodel->create();
    if (false === $vo) die($Pagemodel->getError());
    
    $topicid = $Pagemodel->add();
    if ($topicid) {
        // 關鍵:使用 Session::set 寫入,而非直接操作 $_SESSION
        Session::set(C('USER_AUTH_KEY'), $user);
        echo "<script>alert('數據庫添加成功');location.href='https://127.0.0.1/zhuce/index.php/index';</script>";
    } else {
        throw_exception("<script>alert('數據庫添加失敗');history.back();</script>");
    }
}

第三步:首頁判斷登錄狀態

在 IndexAction.class.php 中檢測 Session:

public function index() {
    if (!Session::is_set(C('USER_AUTH_KEY'))) {
        $msg = "用戶沒有登錄";
    } else {
        $msg = Session::get(C('USER_AUTH_KEY')) . '歡迎你回來';
    }
    $this->assign('msg', $msg);
    $this->display();
}

第四步:模板顯示

<body>
{$msg}<br />
這是我的首頁
</body>

核心總結

登錄邏輯本質上是圍繞 Session 的三步操作:

  • 寫入: Session::set(C('USER_AUTH_KEY'), $user);
  • 判斷: if (!Session::is_set(C('USER_AUTH_KEY')))
  • 讀取: Session::get(C('USER_AUTH_KEY'))

常見問題補充

ThinkPHP 如何開發登陸權限功能?

框架內置 RBAC 權限控制組件,功能強大,建議深入研究官方文檔。

如何實現自動登錄(記住我)?

無需 JavaScript,登錄時將用戶信息加密存入 Cookie,後續請求中檢測 Cookie 有效性即可實現自動登錄。

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