【discuz x3】discuz中session机制流程图



这里值得注意的是,当用户退出的时候,会执行一个叫clearcookie的方法,这个方法是把用户的所有COOKIE清空,而SID是存在COOKIE里的,这时候要是清空了COOKIE则SID的值就会被改变了

为了保持当前这个用户的SID(不管登录、还是退出,SID的值都一样,模拟会话的基本原理),DX用了一个小技巧,即在退出的时候,调用了showmessage方法

showmessage方法是DX通用的提示跳转方法,调用这个方法会给用户一个很好的提示页面

但是在这个页面里,他会加载footer.htm模板,这个模板里执行了updatesession方法,而这个方法里会把SID再重新种到COOKIE里

即:

清除SID的COOKIE  –> 调用showmessage –> 调用updatesession –>重新种上SID的COOKIE

这时SID就能从头到尾保持不变了。


************************************************************************************************************

************************************************************************************************************

discuz没有用 php内置的session机制,而是使用了自己的方式(并且每次初始化页面都会清空 $_SESSION变量),这会让不了解的人产生迷惑。
推测:实时根据sid来清除session表数据
discuz没有重写php默认的session存储方式,但是session文件在哪里呢?
discuz 使用两张内存表分别存储后台用户和前台用户数据,在数据库中可以看到有两个 SESSION 表:
一个是pre_common_adminsession,是管理员登录后台的 SESSION 表;
另一个是pre_common_session 表,是所有用户在前台浏览页面时的 SESSION 表。
这两个表都是内存表(内存表的读写速度远高于 MYISAM 表及文本文件)。

discuz中没有session_start()等语句,所以就不会产生session文件,全程不依赖于session文件;
discuz中的session不是我们php传统意义上的session,discuz中的session只是一层披着session衣服的数据表中的数据【提示:跟ecshop系统的session机制类似】

************************************************************************************************************

************************************************************************************************************


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值