与discuz整合代码(登录)(支持最新的discuz5.5.0)

来源:互联网 发布:sd卡损坏如何恢复数据 编辑:程序博客网 时间:2024/05/18 02:01
<?php
//该文档保存为login.php
//首先将接口技术文档里的加密解密函数拷贝
//为了不让代码太乱,我拷贝到文档的结尾处
//假设自己的用户数据库表里用户名字段为UserName, 密码字段为Pwd, Email字段为 Email
//注册页实现方法差不多,可自行实现,疑问加我QQ:2666556


$act=(isset($_GET['act']))?$_GET['act']:"login";
if(function_exists($act)) $act();else login();        
if($act=="logout")
{
logout();
}
function login()
{        
        
$ErrMsg=UserCheck();
        
if($ErrMsg!="")echo $ErrMsg;        
        
//后面加上显示你的登陆表单的代码 如
?>
<form action=bbs.php?act=login method=post>
用户名
:<input name=username value="byaren2002">
密码
:<input name=password value="65388084">
<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换成你登陆表单里的密码域   
        //$pwd==$_POST['password'];                     

        if($usnm==""return "请输入用户名!";
        
if($pwd==""return "请输入2密码!";
        
        
//=========数据库处理==========================
        $db=mysql_connect("localhost", "root", "");
        
mysql_select_db("521");
$sql="Select * from `users` where username='".$usnm."' Limit 1";        
        
$rs = mysql_query($sql,$db)        ;
        
$row = mysql_fetch_array($rs);
        
if(!$row)return "该用户不存在";
        
if($row["password"]!=substr(md5($pwd),8,16))return "密码错误";
        
mysql_free_result($rs);        
        
        
//==============header到bbs=====================        
        $member = array
        (
                        
'time'     => time(),
                        
'username' => $row["username"],
                        
'password' => $row["password"],
                        
'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="../../bbs";                                        
        
$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");                        

}


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

function passport_encrypt($txt, $key) {
        
srand((double)microtime() * 1000000);
        
$encrypt_key = md5(rand(0, 32000));        
        
$ctr = 0;
        
$tmp = '';
        
for($i = 0$i < strlen($txt); $i++) {
                        
$ctr = $ctr == strlen($encrypt_key? 0 : $ctr;
                        
$tmp .= $encrypt_key[$ctr].($txt[$i^ $encrypt_key[$ctr++]);
        }
        
return base64_encode(passport_key($tmp, $key));
}

function passport_decrypt($txt, $key) {
        
$txt = passport_key(base64_decode($txt), $key);
        
$tmp = '';
        
for ($i = 0$i < strlen($txt); $i++) {
                 
$tmp .= $txt[$i^ $txt[++$i];
        }
        
return $tmp;
}

function passport_key($txt, $encrypt_key) {
        
$encrypt_key = md5($encrypt_key);
        
$ctr = 0;
        
$tmp = '';
        
for($i = 0$i < strlen($txt); $i++) {
                        
$ctr = $ctr == strlen($encrypt_key? 0 : $ctr;
                        
$tmp .= $txt[$i^ $encrypt_key[$ctr++];
        }
        
return $tmp;
}

function passport_encode($array) {
        
$arrayenc = array();
        
foreach($array as $key => $val) {
                   
$arrayenc[] = $key.'='.urlencode($val);
        }
        
return implode('&', $arrayenc);

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

?>
 
原创粉丝点击