不用登陆直接购买php,关于DISCUZ不用通行证登陆得内容介绍

本文详细介绍了如何在不使用DISCUZ通行证的情况下实现论坛登录,通过解析和利用DISCUZ的内置函数,如dsetcookie、authcode等,建立和识别COOKIE来完成用户身份验证。同时,文章还提供了登陆函数lgoin和检查登录状态的is_login函数的代码示例,帮助读者理解DISCUZ的登录机制。
摘要由CSDN通过智能技术生成

关于DISCUZ不用通行证登陆得内容介绍

更新时间:2008年10月04日 15:56:39   作者:

DISCUZ是中国最常用的论坛,虽然他本身有通行证给大家连接,但实际上用户的统一还是很不好,经常要建立两个用户表,第一不利于注册和管理,第二浪费数据库。

关于DISCUZ不用通行证登陆得内容介绍

DISCUZ是中国最常用的论坛,虽然他本身有通行证给大家连接,但实际上用户的统一还是很不好,经常要建立两个用户表,第一不利于注册和管理,第二浪费数据库。

最近做一个项目也是使用的DISCUZ,所以研究了一下DISCUZ的登陆,基本完成了同步登陆。大家如果有兴趣可以研究一下。

别的不废话了,如果你自己写的系统,可以直接用DISCUZ的公用文件,直接引用include/common.inc.php就好了,这样最简单了,只要引用这个文件,$discuz_uid就是你的用户ID了,$discuz_user就是你的用户名,

如果你用的自己的公用文件,就要提取两个函数,在global.func.php中,有两个函数

Dsetcookie,和authcode,如果你不懒的话在复制一个函数clearcookies,第一个就是DISCUZ自己的建造COOKIE的函数,第二个是DISCUZ的可逆加密函数,第三个是清除COOKIE函数,我是放到我自己的FUNC.PHP文件中了

好了,咱们开始写建立和识别COOKIE的方法了

function lgoin($array)

{

$username = $array['username'];

$password = $array['password'];

$sql = "SELECT `uid`,`password`,`secques` FROM `cdb_members` WHERE

`username`='$username' and `password`=md5('$password')";

try {

$rs = $this -> _db -> query($sql);

}catch (Exception $e){

exit("查询出错,出错信息:".$e->getMessage());

return 0;

}

$row = $this -> _db -> fetch($rs); //查询登陆的用户名和密码是否正确

if($row){

dsetcookie('sid','',-2423234234); // 注销掉sid

$secques = $row['secques'];

$uid = $row['uid'];

$formPassword = $row['password'];

dsetcookie('auth', authcode("$formPassword\t$secques\t$uid", 'ENCODE','123'), '0');

return 1;

}else{

return 2;

}

}

这是一个登陆函数,废话不说了,直接说关键部分吧,在查询之后,当获得到信息后,(用户名和密码正确的话)我们获得3个信息,UID,PASSWORD,和SECQUES,这三个是DISCUZ建立COOKIE需要用的,第一个是用户ID,第二个是加密后的密码,第三个是加密后的回答问题答案(即使没有设置也要用),DISCUZ是需要提示问题和答案的,而我们登陆就不需要了,所以我这里直接把他查出来了。dsetcookie('auth', authcode("$formPassword\t$secques\t$uid", 'ENCODE','123'), '0');

这句就是建立用户的COOKIE,别的不用说了,请注意这句'123',这个地方一定要注意,这个是加密时设置的KEY,就是你这里需要和你DISCUZ的一样,所以有三个地方一定要统一,一个是global.func.php,一个是你自己复制出来的那个authcode函数,还有就是你在使用authcode的时候。这时候论坛应该可以登陆了,如果不能登陆,请看下面

我们var_dump($_COOKIE)一下,发现显示的是:array(5) { ["eVb_cookietime"]=> string(7) "2592000" ["eVb_oldtopics"]=> string(3) "D1D" ["eVb_sid"]=> string(6) "HfxRDJ" ["eVb_auth"]=> string(68) "LSwuxyf7QECdnc+9AxgOihQvc1ScFQQsUvgnafBVrFmuHq8DlIvj57rq1PVRlJ05g1Kb" ["eVb_visitedfid"]=> string(1) "2" }(可能有不一样的地方,不用着急)

我们这里注意一下eVb_auth,其实我们的加密信息被存储到这个COOKIE里了,这里的EVB是DISCUZ默认的COOKIE前缀,如果你更改了COOIKE的话这个也会变化。

所以我们就要处理这个eVb_auth;

function is_login()

{

if(isset($_COOKIE['eVb_auth'])){

list($discuz_pw, $discuz_secques, $discuz_uid) = isset($_COOKIE['eVb_auth']) ? explode("\t", authcode($_COOKIE['eVb_auth'], 'DECODE','123')) : array('', '', 0);

$discuz_pw = addslashes($discuz_pw);

$discuz_secques = addslashes($discuz_secques);

$discuz_uid = intval($discuz_uid);

// 不存在$_DCOOKIE['auth']的话 就直接清楚COOKIE

if(isset($_COOKIE['eVb_auth']) && !$discuz_uid) {

clearcookies();

}

if($discuz_uid){

$sql = "SELECT `username`,`groupid` FROM `cdb_members` WHERE `uid`='$discuz_uid'";

$rs = $this -> _db -> query($sql);

$row = $this -> _db -> fetch($rs);

$discuz_groupid = $row['groupid'];

$discuz_username = $row['username'];

return $array = array("discuz_uid"=>$discuz_uid,"discuz_groupid" => $discuz_groupid,

"discuz_username" => $discuz_username);

}

}else{

if(isset($_COOKIE['eVb_sid'])){

$sid = $_COOKIE['eVb_sid'];

$sql = "SELECT `uid`,`username`,`groupid` FROM `cdb_sessions` WHERE sid ='$sid'";

$rs = $this -> _db -> query($sql);

$row = $this -> _db -> fetch($rs);

if($row){

$discuz_groupid = $row['groupid'];

$discuz_username = $row['username'];

$discuz_uid = $row['uid'];

return $array = array("discuz_uid"=>$discuz_uid,"discuz_groupid" => $discuz_groupid,

"discuz_username" => $discuz_username);

}else{

return 0;

}

}else{

return 0;

}

}

}

我们先看if(isset($_COOKIE['eVb_sid'])){前的这部分

个人感觉唯一要解释一下的就是这句:list($discuz_pw, $discuz_secques, $discuz_uid) = isset($_COOKIE['eVb_auth']) ? explode("\t", authcode($_COOKIE['eVb_auth'], 'DECODE','123')) : array('', '', 0);

这是将EVB_AUTH解密的过程,这里用DECODE来解密,记得后面的123是你的KEY,要保持一直,不然解密不会成功的。

然后在看下半部分:

DISCUZ是通过SESSION和COOKIE两种方式加密的,而他的SESSION保存在数据库中,我们下边这部分就是利用当没有$_COOKIE['eVb_auth']时,用$_COOKIE['eVb_sid']来取出信息;这不过是个数据库操作,没啥好将的,这样,通过建立和读取我们就可以取出DISCUZ的信息了。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了Thinkphp5框架简单实现钩子(Hook)行为的方法,结合实例形式详细分析了Thinkphp5框架实现钩子(Hook)行为的步骤与相关操作技巧,需要的朋友可以参考下2019-09-09

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要介绍了symfony2.4的twig中date用法,结合实例形式分析了twig中针对日期与时间操作的常见方法,需要的朋友可以参考下2016-03-03

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了php设计模式之组合模式,结合星际争霸游戏案例形式分析了php设计模式之组合模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下2020-03-03

4f96a78db829b1556ff16de21e013c7a.png

在本文中我们给大家分享了关于PHP表单验证功能以及相关的实例代码内容,有需要的朋友们学习下。2019-02-02

8cc1031babc6aff2319f1c6af8544aa0.png

平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:2014-08-08

0c932a99bb7b6f23c937db507070cc7b.png

为了安全管理员不想使用后台后,最好是注销下,其实就是销毁session2012-05-05

cca732bf65a93ed2ec0ac80c638460fe.png

PR值查询 | PageRank 查询...2006-12-12

2d9f31f2af7b675a3d153d2b7f1035a7.png

下面小编就为大家带来一篇php把时间戳转换成多少时间之前函数的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了smarty模板引擎中变量及变量修饰器用法,实例分析了smarty模板引擎中常见变量、变量修饰器及常量的具体用法,需要的朋友可以参考下2015-01-01

f4838ec7e2d4da28e0b57d4e852dadd4.png

比较简单易懂的php+mysql留言板

数据库结构:(库名:lyb)2008-03-03

最新评论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值