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

PHP 整合 Discuz 論壇:獲取登入用戶資訊(UID、用戶名、用戶組)的最佳實踐

     編輯:PHP 綜合知識

整合場景

獨立系統需共用 Discuz 論壇的登入狀態,獲取當前用戶的 UID、用戶名、用戶組等資訊。

核心實作程式碼

<?php
// 1. 引入 Discuz 核心初始化檔案(路徑依實際安裝位置調整)
include_once("../discuz/include/common.inc.php");

// 2. 建立用戶資訊陣列
$CTDF_USERINFO = array();
$CTDF_USERINFO["sid"] = $sid;           // Session ID
$CTDF_USERINFO["uid"] = $discuz_uid;    // 用戶 UID
$CTDF_USERINFO["user"] = $discuz_user;  // 用戶名

// 3. 處理遊客狀態
if ($discuz_uid == 0) {
    $CTDF_USERINFO["user"] = "guest_" . $sid;
}

$CTDF_USERINFO["groupid"] = $groupid;   // 用戶組 ID

// 4. 【關鍵】清理 Discuz 全域變數,避免污染自身系統命名空間
$reserved_arr = array(
    "GLOBALS", "_POST", "_GET", "_COOKIE", "_FILES", 
    "_SERVER", "_ENV", "_REQUEST", 
    "CTDF_USERINFO", "reserved_arr"
);

foreach ($GLOBALS as $key => $value) {
    if (!in_array($key, $reserved_arr)) {
        unset($GLOBALS[$key]);
    }
}
unset($reserved_arr, $value);

// 現在可安全使用 $CTDF_USERINFO['uid']、$CTDF_USERINFO['user'] 等
?>

關鍵技術點解析

Discuz 核心變數

命名空間隔離

Discuz 早期版本大量使用全域變數,直接 include 會嚴重污染引入系統的變數空間。上述程式碼透過保留必要的超全域變數與自定義變數,清除其餘所有 $GLOBALS,確保系統變數純淨。

部署建議

  1. 將此程式碼置於所有需要用戶資訊的 PHP 檔案最頂端
  2. 確認 common.inc.php 路徑正確(相對/絕對路徑)
  3. 若 Discuz 採用 UC 中心,可能需額外引入 UC Client

現代替代方案

若使用 Discuz X 系列,建議改用官方提供的 API 介面或 OAuth 整合方式,避免直接引入核心檔案造成維護困難。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變數說明
$discuz_uid當前登入用戶 UID,遊客為 0
$discuz_user當前登入用戶名
$groupid用戶組 ID
$sidSession ID