DedeCMS 在 PHP 5.4+ 環境下後台登入顯示空白,根因是 include/userlogin.class.php 使用已被移除的 session_register() 函數。本文提供精確修復方案與代碼對照。
session_register()、session_unregister()、session_is_registered();keepUser() 方法中大量調用該函數註冊 Session 變量;$_SESSION[$key] = $value 替代 session_register($key);isset($_SESSION[$key]);@session_register($this->keepUserIDTag);
$_SESSION[$this->keepUserIDTag] = $this->userID;
@session_register($this->keepUserTypeTag);
$_SESSION[$this->keepUserTypeTag] = $this->userType;
@session_register($this->keepUserChannelTag);
$_SESSION[$this->keepUserChannelTag] = $this->userChannel;
@session_register($this->keepUserNameTag);
$_SESSION[$this->keepUserNameTag] = $this->userName;
@session_register($this->keepUserPurviewTag);
$_SESSION[$this->keepUserPurviewTag] = $this->userPurview;
@session_register($this->keepAdminStyleTag);
$_SESSION[$this->keepAdminStyleTag] = $adminstyle;
PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');
global $admincachefile, $adminstyle;
if (empty($adminstyle)) $adminstyle = 'dedecms';
// 用戶 ID
// @session_register($this->keepUserIDTag);
$_SESSION[$this->keepUserIDTag] = $this->userID;
// 用戶類型
// @session_register($this->keepUserTypeTag);
$_SESSION[$this->keepUserTypeTag] = $this->userType;
// 用戶頻道
// @session_register($this->keepUserChannelTag);
$_SESSION[$this->keepUserChannelTag] = $this->userChannel;
// 用戶名
// @session_register($this->keepUserNameTag);
$_SESSION[$this->keepUserNameTag] = $this->userName;
// 權限
// @session_register($this->keepUserPurviewTag);
$_SESSION[$this->keepUserPurviewTag] = $this->userPurview;
// 後台樣式
// @session_register($this->keepAdminStyleTag);
$_SESSION[$this->keepAdminStyleTag] = $adminstyle;
PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');
@session_register(...) 行,保留賦值語句;global $admincachefile, $adminstyle; 確保變量可用(原代碼上下文可能已有,視具體版本);$adminstyle 兜底賦值 防止未定義;DedeUserID、DedeLoginTime 正常寫入;若專案較大,可用以下命令快速定位所有調用點:
grep -rn "session_register" --include="*.php" .
逐個按上述模式替換。常見文件還包括:
include/common.inc.php(早期版本初始化 Session);member/inc/inc_archives_functions.php(會員中心相關);這個微小修復能讓老舊 DedeCMS 在現代 PHP 環境繼續運行,為遷移爭取時間。