想試試織夢的產品,下載了DedeCMS V5.7版本,在本地部署後,正確登入背景情況下頁面沒有任何輸出和顯示(錯誤登入或密碼錯誤時才有顯示),也沒有報錯。進到指令碼調試,發現問題出在登入頁login.php中以下部分。
login.php
...$cuserLogin = new userLogin($admindir); if(!empty($userid) && !empty($pwd)) { $res = $cuserLogin->checkUser($userid,$pwd); //success if($res==1) { $cuserLogin->keepUser();//此處以下無輸出 if(!empty($gotopage)) { ShowMsg('成功登入,正在轉向管理管理首頁!',$gotopage); exit(); } else { ShowMsg('成功登入,正在轉向管理管理首頁!',"index.php"); exit(); }echo "ok"; }...
到封裝userLogin類所在的指令碼userlogin.class.php中查看(路徑./include/),所用的keepUser()方法代碼如下:
userlogin.class.php
...function keepUser(){if($this->userID != '' && $this->userType != ''){global $admincachefile,$adminstyle;if(empty($adminstyle)) $adminstyle = 'dedecms';@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, '/');$this->ReWriteAdminChannel();return 1;}else{return -1;}}
把@去掉,session_register()報出錯誤:
Call to undefined function session_register()
證實了問題來源於此。查手冊的描述如下:
"版本:(PHP 4, PHP 5 < 5.4.0)"
"本函數已自 PHP 5.3.0 起廢棄並將自 PHP 5.4.0 起移除。"
查看手冊
session_register()在PHP5.4後來的版本中已經多餘,可以省去而直接用$_SESSION['abc'] ="" ;
查看Stack Overflow關於此方法的問題。
解決方案:去掉或注釋掉所有的session_register(),改用直接存$_SESSION數組。
keepUser()部分
...//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;...
修改後就正常顯示了。
我是從織夢首頁上下載的"最新"版本,很奇怪難道沒有人遇到同樣的問題嗎。這種問題既然這裡能出現,別的部分就無法保證不會有更多這樣的隱患存在了。
本文也發表在我的獨立部落格blog.mc-zone.me上,點擊 訪問此文