DISCUZ代码分析之COOKIE篇

时间: 2009-10-22  分类: php+Mysql  收藏
discuz提供了通行证 可有时候使用通行证不一定适用 就比如说那一段很长很长的url吧 看着就让人心烦

有什么解决方法捏? 那就是生成一个discuz 验证cookie

废话说完了 开始正题:
开始之前 咱先了解一下discuz的登陆机制
先来一个简单的form

<?php <form action='i_login.php'>
user:<input name='username' type='text'>
password:<input name='password' type='password'>
<input type='submit' value='login'>
</form>
?>下面 说下php方面的 我们假设改文件和discuz同一目录里
看代码
i_login.php

<?php   /** * 加载discuz的入口文件 当然你也可以不加 不过你得提出几个必要的函数 */
require_once'./include/comon.inc.php';   
$formUsername=trim($username);// 接受POST传来的
$username$formPassword=trim($password);// 接受POST传来的$password   
/** * 说下下面的secques * secques呢 是论坛里的安全回答经过编码后提取的一段字符 虽然我们登陆的时候不会用到它 * 但是生成COOKIE呢 它还是不可或缺的滴 */    
$query=$db->query("SELECT uid,password,secques FROM cdb_members WHERE username='$formUsername'");
$member=$db->fetch_array($query);   // 验证用户密码是否匹配if($member['password']==md5($formPassword)){// 已经验证用户密码都是匹配的 下面比较关键的就是生成cookie了 可要仔细看好了   
/*   先说下dsetcookie函数 这是一个dz一个设置cookie的函数 可以在include/global.func.php里查看 通常只需要三个参数即可 第一个为cookie键 第二个为键值 第三个为cookie有效时间 这里我就随便设置一个   再说 authcode 此为加密函数 俺一直用这个函数 很强大 很难破解 有兴趣的朋友也可在include/global.func.php里   找到改函数 研究一下 */
dsetcookie('sid','',-2423234234);// 注销掉sid
dsetcookie('auth',authcode("$formPasswordt$$member['secques']t$member['uid']",'ENCODE'),'1234243');    
// OK 关键步骤 我们都已经完成了 下面就由你写一个header跳转到论坛首页看是否登陆了 我本地测试可以 你由问题的话那可就是// RPWT了   
header("location:/index.php");      
}else{// 我们这里返回一个错误信息 告诉那个用户密码错误}  
?>好 一个简单的登陆验证就完成了

如果你不想加载common.inc.php文件的话 你需要提取
authcode 和dsetcookie函数 都比较简单哈

OK 我们继续说下discuz验证部分 没兴趣的可以跳过去

验证部分 在common.inc.php 大约119行 开始

<?php
// 拆解COOKIE
authlist($discuz_pw,$discuz_secques,$discuz_uid)=isset($_DCOOKIE['auth'])
?>
分享到:

评论

昵 称: