首页 > CMS > Discuz > 正文

Discuz!X中SESSION机制实例详解

2024-07-09 22:57:41
字体:
来源:转载
供稿:网友
这篇文章主要介绍了Discuz!X中SESSION机制,以实例形式较为详细的分析了Discuz!X中SESSION机制的原理与数据库操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
 

本文实例讲述了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 是:

复制代码代码如下:
<a href="http://ux.com/member.php?mod=logging&action=login&loginsubmit=yes&floatlogin=yes&inajax=1">http://ux.com/member.php?mod=logging&action=login&loginsubmit=yes&floatlogin=yes&inajax=1</a>

数据提交到了 member.php 文件中,在程序中可看到下面的代码:
  1. $mod = !in_array($discuz->var['mod'], $modarray) ? 'logging' : $discuz->var['mod']; //mod的值即是接下来加载的php页面 
  2. define('CURMODULE', $mod); 
  3. $modcachelist = array('register' => array('modreasons''stamptypeid''fields_required''fields_optional''ipctrl')); 
  4. $cachelist = array(); 
  5. if(isset($modcachelist[CURMODULE])) { 
  6.  $cachelist = $modcachelist[CURMODULE]; 
  7. $discuz->cachelist = $cachelist; 
  8. $discuz->init(); 
  9. runhooks(); 
  10. require DISCUZ_ROOT.'./source/module/member/member_'.$mod.'.php'//完成程序的包含操作 
 

打开source/module/member/member_logging.php文件,是一个类,在类的前面可看到下面三句代码:
 

  1. $ctl_obj = new logging_ctl();  
  2. $method = 'on_'.$_G['gp_action']; // $_G['gp_action'] 等于action的值即 login  
  3. $ctl_obj->$method(); //$ctl_obj->on_login();  
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表