標籤:des style blog http color io ar strong art
想試試織夢的產品,下載了DedeCMS V5.7版本,在本地部署後,正確登入背景情況下頁面沒有任何輸出和顯示(錯誤登入或密碼錯誤時才有顯示),也沒有報錯。進到指令碼調試,發現問題出在登入頁login.php中以下部分。
login.php
[php] view plaincopy
- ...
- $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
[php] view plaincopy
- ...
- 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()部分
[php] view plaincopy
- ...
- //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;
- ...
修改後就正常顯示了。
我是從織夢首頁上下載的"最新"版本,很奇怪難道沒有人遇到同樣的問題嗎。這種問題既然這裡能出現,別的部分就無法保證不會有更多這樣的隱患存在了。
5.4php不支援dede的解決方案