喜悦国际村 
» 游客:  注册 | 登录 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【北京】--【低薪】-【诚聘】--- 高级PHP工程师,WEB前台开发工程师

上一主题 下一主题
 11  1/2  1  2  > 
     
标题: [原创] DISCUZ浅析之COOKIE篇  
 
isno (小仙)
版主
Rank: 7Rank: 7Rank: 7
好想谈恋爱


UID 78818
精华 1
积分 115269
帖子 3732
金钱 113839 喜悦币
威望 10
人脉 1420
阅读权限 100
注册 2006-8-22
来自 山东哇 山东哇
状态 离线
DISCUZ浅析之COOKIE篇

DISCUZ浅析之COOKIE篇

相信论坛里的朋友很多都在用discuz 并会因为种种的需要结合discuz做各种系统
对此,discuz提供了通行证 可有时候使用通行证不一定适用 就比如说那一段很长很长的url吧 看着就让人心烦
有什么解决方法捏?为了社区朋友们以后方便开发 这几天呕心沥血 肝肠寸断 孜孜不倦 终于让偶给想出了一个比较天才的想法
:hoho 那就是生成一个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>
?>
(上面的代码不用我解释吧 啥 看不懂? 得 我告诉你 这就是HTML 也就我这样 比较资深的专家才能写出来)

OK,一个很实用的登录框已经完成。。。

下面 说下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 auth
list($discuz_pw$discuz_secques$discuz_uid) = isset($_DCOOKIE['auth']) ? explode("t"authcode($_DCOOKIE['auth'], 'DECODE')) : array(''''0);

$discuz_pw addslashes($discuz_pw);
$discuz_secques addslashes($discuz_secques);
$discuz_uid intval($discuz_uid);

// 不存在$_DCOOKIE['auth']的话 就直接清楚COOKIE
if(isset($_DCOOKIE['auth']) && !$discuz_uid) {
    
clearcookies();
}

$newpm $newpmexists $sessionexists $seccode $bloguid 0;
if(
$sid) {

      
//存在$discuz_uid的话 根据uid取出用户信息 否则根据sid
    
if($discuz_uid) {
        
// 取用户信息
    
} else {
        
// 用sessions表中取用户信息
    
}

    
// 下面就是验证了 我不写了 (sid是用户的一个sessionid 用户登陆后会在sessions表内生成一条用户记录 用户推出后该记录删除
?>
代码就随手写上来  并没有经过测试 可能有的地方说的也不是很清楚 还请大伙原谅哈
请继续关注偶的第二篇菜文 discuz浅析之模板引擎篇

未完待续.....

关于作者:isno。接近90后人,05年进入php大家庭,现为上海某某公司一无名phper。

网站:www.isno.cn
MSN:isno@yahoo.cn
转载请注明作者及出处(www.isno.cn)
2008-3-20 10:47 PM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
dreamblaze
高级会员
Rank: 4
administrator


UID 78956
精华 0
积分 968
帖子 976
金钱 847 喜悦币
威望 0
人脉 121
阅读权限 50
注册 2006-8-24
来自 福州
状态 离线
[推荐阅读] 火箭终于输了
其实。。我就是这样做的



天下流氓数吾乡
吾乡流氓数吾庄
吾庄流氓数吾弟
吾教吾弟耍流氓   
2008-3-21 10:47 AM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
qibinghua (qibinghua)
新手上路
Rank: 1
初级会员



UID 64783
精华 0
积分 30
帖子 37
金钱 30 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-6-16
状态 离线
[推荐阅读] 创客中国团队发展继续招聘PHP\C++开发工程师
我记得有个人的名字和isno很像,忘记是谁来.
2008-3-21 04:26 PM#3
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 网站建设工作室招聘:销售员,发帖员,推广员...
90后呀,才十多岁……



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2008-3-29 01:12 AM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
darkcc123 (darkcc123)
乞丐

初级会员



UID 67166
精华 0
积分 -1
帖子 59
金钱 -1 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2005-12-14
状态 离线
[推荐阅读] php问题!!为什么我的session不听话呢?
90?才18岁呀?
2008-3-30 10:57 PM#5
查看资料  发短消息  顶部
 
dreamblaze
高级会员
Rank: 4
administrator


UID 78956
精华 0
积分 968
帖子 976
金钱 847 喜悦币
威望 0
人脉 121
阅读权限 50
注册 2006-8-24
来自 福州
状态 离线
[推荐阅读] PHP中级程序员
小P孩啊。。。为了MM跑上海去,果然是年轻人!我都不敢为了MM跑沈阳去了,唉,老了,懦弱了



天下流氓数吾乡
吾乡流氓数吾庄
吾庄流氓数吾弟
吾教吾弟耍流氓   
2008-4-1 04:50 PM#6
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
scf2
注册会员
Rank: 2
中级会员



UID 19294
精华 0
积分 196
帖子 211
金钱 196 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-4-1
来自 重庆人在深圳
状态 离线
[推荐阅读] 请问下,supesite修改模板的问题
DZ这个思路很不错的



傲客网,找你想要的......
http://oklrc.com
2008-4-8 10:32 PM#7
查看资料  访问主页  发短消息  QQ  顶部
 
mdy_jun
注册会员
Rank: 2



UID 72596
精华 0
积分 171
帖子 156
金钱 171 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-30
状态 离线
[推荐阅读] 公司招聘php,FLASH人员上海
解释的很清楚.学习了.改天看看 authcode这个加密函数



http://movie.mamabian.com
免费看最新最全的电影
2008-4-16 11:02 AM#8
查看资料  访问主页  发短消息  顶部
 
gouki
注册会员
Rank: 2
一般会员



UID 15556
精华 0
积分 108
帖子 93
金钱 108 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-7-29
状态 离线
[推荐阅读] 字符串截取
有必要搞得这么复杂吗?
不过……DZ还是把反斜框注释掉了。详细可以看他的解析cookie那段,明明是explode("\t"),结果……就成了t了




http://www.cnitblog.com/neatstudio/
http://www.neatcn.com
飞天小肥猪的简单人生
2008-4-22 12:00 AM#9
查看资料  Blog  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 7411
帖子 1669
金钱 7401 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] Joomla!扩展开发
参见UC......



在场外支持奥运.....
2008-5-5 02:09 PM#10
查看资料  访问主页  发短消息  QQ  顶部
 11  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.028565 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP