用戶登錄是 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'
);
在 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'))框架內置 RBAC 權限控制組件,功能強大,建議深入研究官方文檔。
無需 JavaScript,登錄時將用戶信息加密存入 Cookie,後續請求中檢測 Cookie 有效性即可實現自動登錄。