每個人與每個人的情況不同,解決方法不同。本例只說明我遇到的情況,不是萬能的方法
DEDECMS 5.7 UTF-8
PHP5.4.7版本
修改文件include/userlogin.class.php
搜索function exitUser(),將下面的5行session_unregister替換成2行session_unset();session_destroy();
示例
function exitUser() { ClearMyAddon(); session_unset(); session_destroy(); DropCookie('dedeAdmindir'); DropCookie('DedeUserID'); DropCookie('DedeLoginTime'); $_SESSION = array(); }
搜索function keepUser(),將下面的@session_register……注釋掉即可,6處
示例
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; }
說明,php5.4早就已經拋棄session_register和session_unregister這2個函數了,所以會出錯。
session_unset() 不帶參數,釋放當前在內存中已經創建的所有$_SESSION變量,但不刪除session文件以及不釋放對應的session id,沒有返回值。
session_destroy() 不帶參數,刪除當前用戶對應的session文件以及釋放session id,內存中的$_SESSION變量內容依然保留,成功返回true。
session_unregister() 帶參數,注銷一個指定session變量,成功返回true。
所以,釋放用戶的session所有資源,需要順序執行如下代碼:
<?php
session_unset();
session_destroy();
?>
php5可以不用聲明session就可以使用,所以注銷掉session的聲明
