解决其他系统和discuz同步登录和退出的问题!
来源:互联网 发布:中异软件切割 编辑:程序博客网 时间:2024/05/19 08:00
需求:站点是由两个系统组成的分别是基于TP的yourphp和discuz,yourphp作为一个新闻站,而discuz作为一个论坛模块,新闻站只提供用户新闻浏览得功能,用户不能注册,只能浏览新闻,论坛提供注册,在网站的首页提供了用户登陆的入口,
出现的问题:
discuz提供了一个用户登录的入口“bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes”,用户在网站填写信息的时候其实是提交到论坛里面进行登陆,登陆过程是在论坛进行的。那么网站首页的那个登陆框因为没有判断用户是否登录,所以即使用户登陆之后还是会显示登陆框,这就出现了一个问题,怎么在不同 的系统判断用户是否登陆。
通过查资料,我找到了这两篇文章
discuz session机制流程图http://www.super-jin.com/?p=55
Discuz 的 session 机制 http://my.oschina.net/xieyunzi/blog/161756#OSC_h2_1 这两篇文章简述了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的session原理
我查询pre_common_session表,的确是当用户登陆的时候,会把session信息保存在这个表里,这个表中有如下字段
当用户登陆的时候uid不为“0“ username不为空,所以我们可以根据此判断用户是否登录
下面会出现第二个问题,我根据什么条件查询用户的username是否为空呢?那个where条件后面该怎么写?
答案就是我们需要获取表中的sid的值。并根据这个值查询数据表,
下面给大家讲解一下怎么获得这个sid的值
<?php require dirname(__FILE__). '/config/config_global.php'; //discuz 的配置文件 $c_pre = $_config['cookie']['cookiepre'].substr(md5($_config['cookie']['cookiepath'].'|'.$_config['cookie']['cookiedomain']), 0, 4).'_'; $sid = $_COOKIE[$c_pre.'sid'];
这段代码就是在网上找到的查询保存在本地cookie中的sid的值得代码,
引入的config_global.php就是需要导入的discuz的配置文件
在改配置文件中我们可以看到这样几行配置信息
// -------------------------- CONFIG COOKIE --------------------------- //$_config['cookie']['cookiepre'] = 'LXyb_';$_config['cookie']['cookiedomain'] = '';$_config['cookie']['cookiepath'] = '/';
对应上面你发现了什么?打印的cookie就是配置文件
LXyb_2132_sid"]=>string(6) "xYkv4g"
LXyb_
我们可以模拟这个数值则$_COOKIE['"LXyb_2132_sid']就是我们想要的数据,就是那个seesion表中的sid
至此你就可以使用这个sid查询用户是否登陆的状态了。
这为本人两天的总结,其实最后发现其实很简单。
- 解决其他系统和discuz同步登录和退出的问题!
- 解决其他系统和discuz同步登录和退出的问题!
- ecshop和discuz的同步登陆和退出
- ucenter 的同步登录和退出
- phpcms和discuz实现同步登录
- UCENTER1.6下解决DISCUZ注册同步ECSHOP登录问题
- 【2015/11/15】为了解决账号登录显示用户名和登录之后退出的问题倒腾一晚上!
- 帝国cms和discuz免激活同步登录
- 实现discuz门户与论坛不能同步登录的问题
- ecshop 和 discuz 整合后,通信成功,但是不能同步登录的解决办法!
- struts2的登录和退出
- 登录和退出登录的操作逻辑
- discuz通过调用函数实现同步登录与退出
- 整合Ecshop与Discuz通讯成功,同步登录、退出不一致
- Discuz使用UCenter实现同步登录、注册、退出
- 解决destoon与discuz整合后,只有destoon登录、退出时discuz会同步,反则无效的方法!!!!
- 使用JSP和Struts正确的解决用户退出问题
- 正确的解决用户退出问题―JSP和Struts
- 【HBase】提升HBase写性能
- Extjs中,带有下拉选项的条件查询。
- 链表翻转
- Android 内存溢出解决方案(OOM) 整理总结
- linux大内存页 HugePages on Linux
- 解决其他系统和discuz同步登录和退出的问题!
- HTTP GET POST本质区别详解
- BDC: CALL TRANSACTION USING参数详解
- 关于java.lang.IllegalStateException异常
- Android使用百度地图SDK调用百度地图"java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform."
- 将字符串转成十六进制
- js兼容问题,鼠标相对于事件源的位置,offsetX,layerX
- Storm数据流模型的分析及讨论
- 知情人称刘迎霞涉嫌行贿犯罪 被调查时已外逃