与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);
}
//=========================================================================
//===========================拷贝结束======================================
?>
//该文档保存为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);
}
//=========================================================================
//===========================拷贝结束======================================
?>
- 与discuz整合代码(登录)(支持最新的discuz5.5.0)
- ecshop discuz 与帝国cms系统单点登录的整合
- discuz的微信登录与首页面整合
- 最新版本dede与discuz通过ucenter完美整合
- 最新版本dede与discuz通过ucenter完美整合
- 解决destoon与discuz整合后,只有destoon登录、退出时discuz会同步,反则无效的方法!!!!
- 自动登录DISCUZ,发帖的代码(部分)
- 自动登录DISCUZ,发帖的代码(部分)
- dedecms 与 discuz 对比,最新的看法
- 参考Dedecms整合Discuz完全攻略实现最新的结合
- 整合Ecshop与Discuz通讯成功,同步登录、退出不一致
- Jsp与discuz的整合方法
- donetcms与Discuz整合的webconfig设置
- discuz 登录代码
- discuz 登录代码流程
- Discuz的passport与其他登录系统的整合
- Discuz!NT整合关于登录、退出、注册的类
- discuz 与YII 的同步登录
- Installing and configuring Xen
- 几个C#编程的小技巧 [转]
- 感悟
- [Color]灰度系数与网点增大
- [HOLER]实战solaris之域名系统文件配置
- 与discuz整合代码(登录)(支持最新的discuz5.5.0)
- 关于ByteArrayOutputStream(字节数组输出流)的一个例子,与ByteArrayInputStream作一比较
- [原创]终于制作出WinCE 5.0的ARM模拟器
- 吼吼!今天开始上班咯!
- [HOLER]VI中执行shell命令
- Algorithm(算法
- 通过javascript操作web控件的自定义属性
- 济南大雨,银座亲历(转载)
- 20世纪最好的10个算法