discuz 沒有用 php 內置的 session 機制,而是使用了本身的方式(而且每次初始化頁面都會清空 $_SESSION 變量),這會讓不瞭解的人產生迷惑。php
discuz 使用兩張內存表分別存儲後臺用戶和前臺用戶數據,在數據庫中能夠看到有兩個 SESSION 表: 一個是pre_common_adminsession
,是管理員登陸後臺的 SESSION 表; 另外一個是pre_common_session
表,是全部用戶在前臺瀏覽頁面時的 SESSION 表。 這兩個表都是內存表(內存表的讀寫速度遠高於 MYISAM 表及文本文件)。數據庫
在 discuz 的根目錄下創建測試文件,test.php,添加內容:cookie
<?php //因爲沒有使用 $_SESSION 變量,因此不須要 session_start() 函數。 // init discuz x3 require dirname(__FILE__). '/source/class/class_core.php'; $discuz = C::app(); $discuz->init(); //var_dump($_G); // for debug var_dump($discuz->session); // for debug // discuz x2 /* require dirname(__FILE__). '/source/class/class_core.php'; $discuz = & discuz_core::instance(); $discuz->init(); */
discuz 的 session id 是其本身控制的,因此這麼獲取session
<?php require dirname(__FILE__). '/config/config_global.php'; //discuz 的配置文件 $c_pre = $_config['cookie']['cookiepre'].substr(md5($_config['cookie']['cookiepath'].'|'.$_config['cookie']['cookiedomain']), 0, 4).'_'; $sid = $_COOKIE[$c_pre.'sid'];
目錄及變量均爲 discuz x3,其餘版本或略有差別app
discuz 的 session 好像是不能存放本身的數據的,由於表的字段是固定的。dom