Discuz 的 session 机制

discuz 没有用 php 内置的 session 机制,而是使用了自己的方式(并且每次初始化页面都会清空 $_SESSION 变量),这会让不了解的人产生迷惑。

discuz的session实现

discuz 使用两张内存表分别存储后台用户和前台用户数据,在数据库中可以看到有两个 SESSION 表: 一个是pre_common_adminsession,是管理员登录后台的 SESSION 表; 另一个是pre_common_session表,是所有用户在前台浏览页面时的 SESSION 表。 这两个表都是内存表(内存表的读写速度远高于 MYISAM 表及文本文件)。

获取 session 的引用

在 discuz 的根目录下建立测试文件,test.php,添加内容:

1 <?php
2     //由于没有使用 $_SESSION 变量,所以不需要 session_start() 函数。
3     // init discuz
4     require_once './source/class/class_core.php';
5     $discuz = C::app();
6     $discuz->init();
7     //var_dump($_G); // for debug
8     var_dump($discuz->session); // for debug

获取cookie中的 session id

discuz 的 session id 是其自己控制的,所以这么获取

1 <?php
2     require_once '../config/config_global.php'//discuz 的配置文件
3     $c_pre = $_config['cookie']['cookiepre'].substr(md5($_config['cookie']['cookiepath'].'|'.$_config['cookie']['cookiedomain']), 04).'_';
4     $sid = $_COOKIE[$c_pre.'sid'];

何时使用

  • 整合其他系统
    • 登陆状态同步。其他系统在登陆入口处检测 discuz 登陆状态,若已登陆则同步其登陆状态(通过把用户信息写到 cookie 和 session 或 数据库 里实现)

目录及变量均为 discuz x3,其他版本或略有差异

discuz 的 session 好像是不能存放自己的数据的,因为表的字段是固定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值