本文實例講述了Discuz!X中SESSION機制。分享給大家供大家參考。具體如下:
在Discuz! X中一如繼往的,SESSION 并沒有使用 PHP 自帶的 SESSION 機制,而是系統的一套自帶的機制。
在數據庫中可以看到有兩個 SESSION 表:
一個是pre_common_adminsession,是管理員登錄后臺的 SESSION 表;
另一個是 pre_common_session 表,是所有用戶在前臺瀏覽頁面時的 SESSION 表。
這兩個表都是內存表(內存表的讀寫速度遠高于 MYISAM 表及文本文件)。
在 Discuz! X 中 SESSION 與 COOKIE 是分不開的,因為 SESSION 就是從客戶端讀取的 COOKIE ,
然后由瀏覽頁面時觸發相關的函數執行,再寫入數據庫 SESSION 表。
我以登錄流程為例來講解程序具體是如何執行的。
在前臺首頁,點擊登錄后,彈出一個登錄窗口,填寫好數據后,提交。form表單提交的 URL 是:
- $mod = !in_array($discuz->var['mod'], $modarray) ? 'logging' : $discuz->var['mod']; //mod的值即是接下來加載的php頁面
- define('CURMODULE', $mod);
- $modcachelist = array('register' => array('modreasons', 'stamptypeid', 'fields_required', 'fields_optional', 'ipctrl'));
- $cachelist = array();
- if(isset($modcachelist[CURMODULE])) {
- $cachelist = $modcachelist[CURMODULE];
- }
- $discuz->cachelist = $cachelist;
- $discuz->init();
- runhooks();
- require DISCUZ_ROOT.'./source/module/member/member_'.$mod.'.php'; //完成程序的包含操作
打開source/module/member/member_logging.php文件,是一個類,在類的前面可看到下面三句代碼:
- $ctl_obj = new logging_ctl();
- $method = 'on_'.$_G['gp_action']; // $_G['gp_action'] 等于action的值即 login
- $ctl_obj->$method(); //$ctl_obj->on_login();
新聞熱點
疑難解答