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 x3 4 require dirname(__FILE__). '/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 9 10 // discuz x2 11 /* 12 require dirname(__FILE__). '/source/class/class_core.php'; 13 $discuz = & discuz_core::instance(); 14 $discuz->init(); 15 */

获取cookie中的 session id

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

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

何时使用

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

PHP Cookie与Session的使用与区别

Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )