解决其他系统和discuz同步登录和退出的问题!
来源:互联网 发布:网络诈骗判多久 编辑:程序博客网 时间:2024/06/05 20:31
需求:站点是由两个系统组成的分别是基于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'] = '<span style="font-family:monospace;font-size:14px;color:#000000;font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">LXyb</span>_';
- $_config['cookie']['cookiedomain'] = '';
- $_config['cookie']['cookiepath'] = '/';
打印的cookie就是配置文件
LXyb_2132_sid"]=>string(6) "xYkv4g"
- <span style="font-family:monospace;font-size:14px;color:#000000;font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">LXyb</span>_
则$_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
- PHP5各个版本的新功能和新特性总结php5.4-5.6(二)
- 用memcache.php监测memcache的状况
- Discuz!全局变量列表
- Discuz G变量注解
- Discuz后台页面开发
- 解决其他系统和discuz同步登录和退出的问题!
- DISCUZ 插件机制
- magento二次开发、模板制作-说明文档
- 一键复制内容
- 加密与解密函数authcode解析
- common.js 内置(AJAX)函数帮助文档
- Base64编码及其作用
- uc_client/client.php接口文件分析
- hadoop笔记