DedeCMS V5.7使用session_register()在PHP5.4以上無法登入後台,頁面無顯示

來源:互聯網
上載者:User

想試試織夢的產品,下載了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上,點擊 訪問此文

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.