数据正在传送.请稍候

梦游时光互联 » 服务器合租/整机租用 » 通行证 Discuz Passport整合笔记[转]
     
本帖主题: 通行证 Discuz Passport整合笔记[转]
2006-7-16 10:26 AM No.1 发表人:ttmax  社区短消息  TOP
ttmax (瘟神)
King
Rank: 6Rank: 6
洪魔!天下无双


热血青年奖  
UID 1330
精华 5
积分 1630
帖子 1146
体力 1121
威望 99
贡献 0
阅读权限 70
注册 2006-6-18
状态 离线
[广告]: 备案信息核验单 - 现行国内备案必看
<?php
//该文档保存为login.php
//首先将接口技术文档里的加密解密函数拷贝
//为了不让代码太乱,我拷贝到文档的结尾处
//假设自己的用户数据库表里用户名字段为UserName, 密码字段为Pwd, Email字段为 Email
//注册页实现方法差不多,可自行实现,疑问加我QQ:2666556

$act=(isset($_GET['act']))?$_GET['act']:"login";
if(function_exists($act)) $act();else login();        

function login()
{        
        $ErrMsg=UserCheck();
        if($ErrMsg!="")echo $ErrMsg;        
        //后面加上显示你的loginform的代码 如
?>
<form action=login.php?act=login method=post>
用户名:<input name=username>
密码:<input name=password>
<input name=submit type=submit value=登陆></form>
<?php

}//end function

function logout()//登出
{
        $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
        $auth=$_COOKIE['auth'];
        setcookie("auth", "",time() - 3600);
        $forward=$_GET['forward'];
        if($forward=="")$forward="../../index.php";//这里换成你的主页绝对地址或相对地址                                       
        $verify = md5('logout'.$auth.$forward.$passportkey);
        $auth=rawurlencode($auth);
        $forward=rawurlencode($forward);
        header("Location: bbs/api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");
}

function UserCheck()
{        
                $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
               
                //===========验证输入=====================
                if(!isset($_POST['submit'])) return; // login表单的按钮需要与此同名
                $usnm=$_POST['username'];//username换成你登陆表单里的用户名域                        
                $pwd=$_POST['password'];//password换成你登陆表单里的密码域                        
                if($usnm=="") return "请输入用户名!";
                if($pwd=="") return "请输入密码!";
               
                //=========数据库处理==========================
                $db=mysql_connect("localhost", "root", "");
                mysql_select_db("your_db_name");
            $sql="Select * from `user` where UserName='".$usnm."' Limit 1";        
                $rs = mysql_query($sql,$db)        ;
                $row = mysql_fetch_array($rs);
                if(!$row)return "该用户不存在";
                if($row["Pwd"]!=md5($pwd))return "密码错误";
                mysql_free_result($rs);        
               
                //==============header到bbs=====================        
                $member = array
                (
                        'time'                        => time(),
                        'username'                => $row["UserName"],
                        'password'                => $row["Pwd"],
                        'email'                        => $row["Email"]
                );
                $auth = passport_encrypt(passport_encode($member), $passportkey);
                setcookie("auth",$auth,($_POST["Cookie"]? time()+(int)$_POST["Cookie"] :0));
                $forward=$_POST['forward'];
                if($forward=="")$forward="../../index.php";                                       
                $verify = md5('login'.$auth.$forward.$passportkey);
                $auth=rawurlencode($auth);
                $forward=rawurlencode($forward);
                header("Location: bbs/api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");                        

}


//=============================================================
//=============以下为拷贝过来的函数=============================


/**
* Passport 加密函数
*
* @param                string                等待加密的原字串
* @param                string                私有密匙(用于解密和加密)
*
* @return        string                原字串经过私有密匙加密后的结果
*/
function passport_encrypt($txt, $key) {

        // 使用随机数发生器产生 0~32000 的值并 MD5()
        srand((double)microtime() * 1000000);
        $encrypt_key = md5(rand(0, 32000));

        // 变量初始化
        $ctr = 0;
        $tmp = '';

        // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        for($i = 0; $i < strlen($txt); $i++) {
                // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
                $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                // $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
                // 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
                $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
        }

        // 返回结果,结果为 passport_key() 函数返回值的 base65 编码结果
        return base64_encode(passport_key($tmp, $key));

}

/**
* Passport 解密函数
*
* @param                string                加密后的字串
* @param                string                私有密匙(用于解密和加密)
*
* @return        string                字串经过私有密匙解密后的结果
*/
function passport_decrypt($txt, $key) {

        // $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
        // 经过 passport_key() 函数处理后的返回值
        $txt = passport_key(base64_decode($txt), $key);

        // 变量初始化
        $tmp = '';

        // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        for ($i = 0; $i < strlen($txt); $i++) {
                // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
                // 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
                $tmp .= $txt[$i] ^ $txt[++$i];
        }

        // 返回 $tmp 的值作为结果
        return $tmp;

}

/**
* Passport 密匙处理函数
*
* @param                string                待加密或待解密的字串
* @param                string                私有密匙(用于解密和加密)
*
* @return        string                处理后的密匙
*/
function passport_key($txt, $encrypt_key) {

        // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
        $encrypt_key = md5($encrypt_key);

        // 变量初始化
        $ctr = 0;
        $tmp = '';

        // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        for($i = 0; $i < strlen($txt); $i++) {
                // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
                $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
                // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
                $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
        }

        // 返回 $tmp 的值作为结果
        return $tmp;

}

/**
* Passport 信息(数组)编码函数
*
* @param                array                待编码的数组
*
* @return        string                数组经编码后的字串
*/
function passport_encode($array) {

        // 数组变量初始化
        $arrayenc = array();

        // 遍历数组 $array,其中 $key 为当前元素的下标,$val 为其对应的值
        foreach($array as $key => $val) {
                // $arrayenc 数组增加一个元素,其内容为 "$key=经过 urlencode() 后的 $val 值"
                $arrayenc[] = $key.'='.urlencode($val);
        }

        // 返回以 "&" 连接的 $arrayenc 的值(implode),例如 $arrayenc = array('aa', 'bb', 'cc', 'dd'),
        // 则 implode('&', $arrayenc) 后的结果为 ”aa&bb&cc&dd"
        return implode('&', $arrayenc);

}


//=========================================================================
//===========================拷贝结束======================================

//后来我加上了cookietime
//发现我在网站主叶面退出后,回到bbs 仍未退出
//修改include/common.inc.php中的
//dsetcookie('sid', $sid, 604800);
//将604800改成0即可同步cookie时间

?>


回复:通行证 Discuz Passport整合笔记[转]
2006-7-29 08:44 PM No.2 发表人:bbdbb  社区短消息  TOP
bbdbb
Conqueror
Rank: 3Rank: 3



UID 1420
精华 1
积分 235
帖子 59
体力 48
威望 11
贡献 0
阅读权限 30
注册 2006-6-19
状态 离线
[广告]: 新手解疑1:FTP空间各文件目录的作用
呵呵~可以用在什么地方

回复:通行证 Discuz Passport整合笔记[转]
2006-7-31 01:28 PM No.3 发表人:Clwarm  主页  个人Blog  社区短消息  TOP
Clwarm
Discuz! user
Rank: 6Rank: 6


UID 341
精华 0
积分 741
帖子 333
体力 322
威望 0
贡献 0
阅读权限 60
注册 2006-2-21
状态 离线
[广告]: 优惠券代码:20111001FF20% 有效期:2011.10.01/2011.10.15
支持一下,这东西没用过。









http://17.vi1.cn
回复:通行证 Discuz Passport整合笔记[转]
2006-8-6 11:49 PM No.4 发表人:ttmax  社区短消息  TOP
ttmax (瘟神)
King
Rank: 6Rank: 6
洪魔!天下无双


热血青年奖  
UID 1330
精华 5
积分 1630
帖子 1146
体力 1121
威望 99
贡献 0
阅读权限 70
注册 2006-6-18
状态 离线
[广告]: 新手解疑1:FTP空间各文件目录的作用


QUOTE:
原帖由 Clwarm 于 2006-7-31 01:28 PM 发表
支持一下,这东西没用过。
哭了


回复:通行证 Discuz Passport整合笔记[转]
2006-8-7 01:33 PM No.5 发表人:咸鱼翻身  主页  个人Blog  社区短消息  QQ对话  TOP
咸鱼翻身
Meyu Customer
Rank: 8Rank: 8


热血青年奖   优秀推广员  
UID 1825
精华 0
积分 2964
帖子 2391
体力 2119
威望 1
贡献 0
阅读权限 80
注册 2006-8-6
来自 GDPN
状态 离线
[广告]: 优惠券代码:20111001FF20% 有效期:2011.10.01/2011.10.15
谢谢你的成果~

回复:通行证 Discuz Passport整合笔记[转]
2006-8-7 07:23 PM No.6 发表人:ttmax  社区短消息  TOP
ttmax (瘟神)
King
Rank: 6Rank: 6
洪魔!天下无双


热血青年奖  
UID 1330
精华 5
积分 1630
帖子 1146
体力 1121
威望 99
贡献 0
阅读权限 70
注册 2006-6-18
状态 离线
[广告]: 优惠券代码:20111001FF20% 有效期:2011.10.01/2011.10.15
我顶!

回复:通行证 Discuz Passport整合笔记[转]
2006-8-8 06:20 PM No.7 发表人:Clwarm  主页  个人Blog  社区短消息  TOP
Clwarm
Discuz! user
Rank: 6Rank: 6


UID 341
精华 0
积分 741
帖子 333
体力 322
威望 0
贡献 0
阅读权限 60
注册 2006-2-21
状态 离线
[广告]: 新手解疑1:FTP空间各文件目录的作用
因为暂时我还用不太上嘛,哭啥啊。









http://17.vi1.cn
     

Powered by Discuz!3.12 Licensed © 2001-2005
Processed in 0.008863 second(s), 7 queries , Gzip enabled
所有时间为 GMT+8, 现在时间是 2024-11-24 02:08 AM
清除 Cookies - 联系我们 - 梦游时光互联 -