本文实例讲述了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();
新闻热点
疑难解答