位置: 编程技术 - 正文

Discuz!X中SESSION机制实例详解

编辑:rootadmin

推荐整理分享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 是:&#;数据提交到了 member.php 文件中,在程序中可看到下面的代码:

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

在类中可找到login方法,在方法中,大约 行有下面一个判断语句:

我们来看一下 source/function/function_login.php中的 setloginstatus 函数,是普通的写 COOKIE 操作,不再具体讲解:

Discuz!X中SESSION机制实例详解

到这里可以说是登录流程大部分已经走完,但是 COOKIE 不清除时,会一直存在于客户端,如果超时,程序中会在判断弃用此 COOKIE,并重新写入。

下面我们来看一下 DZX 中 SESSION 操作的类,在 source/class/calss_core.php 文件中:程序中每次请求都会加载 SESSION ,这是由核心类 discuz_core 中的 _init_session 方法来执行的,此方法被置于 类的 init方法中,说明每次加载类,会自动将 SESSION 写入。

操作 SESSION 的类是 discuz_session ,我们看这个类里面的两个方法:

至此我们知道了 SESSION 插入数据库的具体函数,与 COOKIE 的联系,但还不清楚是如何触发此操作的。打开 source/function/function_core.php 文件,找到函数,updatesession ,此函数负责更新 SESSION :

我们在程序源码中搜索此函数,可以看到在很多的模板中都有下面一句代码:浏览页面时将触发此函数,并将 SESSION 写入数据库。

整理一下思绪:

第一步:用户登录,程序将 COOKIE 写入客户端,这些 COOKIE 即是 SESSION 的部分数据,如SID、IP、TIME,不包含用户名、密码等关键信息。

第二步,登录成功后,程序会自动刷新页面,向服务器再次发送请求,服务器加载 discuz_core 核心类,并从 COOKIE 中读取到 SESSION 的相关信息,但还没有写入数据库。

第三步,核心类加载完成,程序继续执行,最后加载模板,触发 updatesession 函数,SESSION 被写入数据库。

希望本文所述对大家的php程序设计有所帮助。

ThinkPHP2.x防范XSS跨站攻击的方法 本文实例讲述了ThinkPHP2.x防范XSS跨站攻击的方法。分享给大家供大家参考。具体如下:一直使用ThinkPHP2.x,通过乌云有向提交了ThinkPHPXSS攻击的bug,抽时

ThinkPHP中数据操作案例分析 本文实例分析了ThinkPHP中数据操作方法。分享给大家供大家参考。具体如下:模板中使用函数,相信大部分的TPer都知道也用过吧。案例:获取用户名的

PHP+AJAX实现投票功能的方法 本文实例讲述了PHP+AJAX实现投票功能的方法。分享给大家供大家参考。具体如下:在这个AJAX实例中,我们将演示一个投票程序,网页在不重新加载的情

标签: Discuz!X中SESSION机制实例详解

本文链接地址:https://www.jiuchutong.com/biancheng/284430.html 转载请保留说明!

上一篇:ThinkPHP进程计数类Process用法实例详解(php进程数量怎么决定)

下一篇:ThinkPHP2.x防范XSS跨站攻击的方法(php如何防止xss攻击)

  • 研发机构采购设计方案
  • 生产调味料用什么手续
  • 房地产开发企业销售自行开发的房地产项目
  • 买新车时旧车置换新车划算吗
  • 关联交易纳税调整期限
  • 研发费用直接计入成本吗
  • 投资子公司亏损如何入账
  • 付款人常驻国家(地区)代码及名称RU
  • 农业企业增值税纳税实务实训心得
  • 劳务费达到多少钱需要招标
  • 小规模纳税人个税申报时间
  • 债券溢价摊销额计算公式
  • 冲减以前年度多计的管理费用分录
  • 营改增后税目税率表
  • 国税的申报表季报本月数如何填写?
  • 小规模纳税人季度多少免税
  • 经营性租赁怎么做账
  • 个人所得税违约怎么查询
  • 关于递延所得税的例题
  • 办理税务迁移
  • 去税局代开开专用发票需要带什么证件?
  • carrier profile
  • 股东不用上班吗
  • 固定资产属于金融负债吗
  • linux 分享文件
  • 转让股权怎么做分录
  • 施工单位代建收费标准
  • 制造业企业预提短期借款利息
  • vue watch和computed
  • pytorch m1
  • 终止cat命令
  • 桥闸通行费发票上注明的金额含税吗
  • 使用van-picker 动态设置当前选中项
  • 进出口会计账务处理
  • 社保的残保金的用途
  • mysql分库分表实践
  • 生产部门使用的无形资产摊销
  • mysql proxy问题的解决方法
  • 其他收益用什么明细账
  • 暂估入库的会计分录怎么写
  • 免抵退税会计处理
  • 个人承担社保有哪些
  • 金税盘入什么科目
  • 经纪代理服务范围
  • 实收资本流程
  • 双倍余额递减法最后两年怎么算
  • 应收利息审计底稿怎么做
  • 一般纳税人抵扣进项税流程
  • 一般户可以发工资有什么后果
  • 其他应收款有没有备抵科目
  • 没有发票就不能保修吗
  • 待摊费用和长期待摊费用税前扣除
  • 销售额是营业额吗?
  • 猎豹如何添加兼容性站点
  • windows 10 build 9888
  • office2003破解
  • win7系统cpu占用率过高怎么办
  • win7系统360浏览器自启动怎么关闭
  • mac safemode
  • linux nc命令详解
  • Linux 修改文件名后缀
  • mblme是什么进程
  • 通过u盘安装win11
  • windows8用的人少
  • win7空间不足c盘
  • linux定时任务详解
  • 上传图片 js
  • shell脚本获取命令的输出结果
  • shell脚本解压tar文件
  • unity碰撞抖动怎么解决
  • jQuery 判断JSON
  • 单例类python
  • js获取弹窗的元素
  • Unity NGUI Tween的用法
  • scrapy python
  • js继承的方式
  • kmp算法理解
  • Python中使用装饰器来优化尾递归的示例
  • 可转债中签当天扣款吗
  • 申报的销项税额怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设