在 Joomla 模板或模組中判斷用戶是否登入,最直接方式是檢查 Session 變數。本文提供極簡程式碼片段,展示如何讀取 $_SESSION['auth']['username'] 顯示歡迎訊息與編輯連結,未登入則顯示登入連結,並說明 Joomla 核心 API 更優雅的替代寫法。
<?php
// Joomla 預設將用戶資訊存放於 $_SESSION['auth']
if (isset($_SESSION['auth']['username'])) {
$username = htmlspecialchars($_SESSION['auth']['username']);
echo "Welcome {$username}!";
} else {
echo "Log in";
}
?>
<?php
use Joomla\CMS\Factory;
$user = Factory::getUser();
if ($user->id) {
// 已登入
echo "Welcome "
. htmlspecialchars($user->name) . "!";
// 進階:檢查權限
if ($user->authorise('core.admin')) {
echo " 管理員";
}
} else {
// 未登入
$loginUrl = \Joomla\CMS\Uri\Uri::base() . 'index.php?option=com_users&view=login';
echo "Log in";
}
?>
| 維度 | 原生 Session | 核心 API |
|---|---|---|
| 相容性 | Joomla 1.5~3.x,自定義整合易 | Joomla 3.x/4.x 標準 |
| 資料完整性 | 僅 username,需額外查詢其他欄位 | 完整 User 物件 (id, name, email, groups, params...) |
| 權限檢查 | 需自行查詢用戶群組 | $user->authorise() 內建 ACL |
| 快取/代理友善 | Session 可能受快取影響 | 核心處理快取上下文 |
| 維護性 | 耦合內部 Session 結構 | 官方 API,升級無痛 |
templates/your_template/index.php:頁首歡迎列modules/mod_custom/:自訂 HTML 模組modules/mod_login/:覆寫登入模組佈局// components/com_ajax/ajax.php
public function checkLogin()
{
$user = Factory::getUser();
echo json_encode([
'logged_in' => (bool)$user->id,
'username' => $user->name,
'user_id' => $user->id,
]);
exit;
}
$_SESSION['auth']['username'] 最快。Factory::getUser(),獲得完整用戶物件、權限檢查、向前相容。htmlspecialchars() 防 XSS。掌握這兩種方式,無論在模板、模組、元件、AJAX 端點,都能靈活判斷並呈現用戶登入狀態。