discuz Passport 通行证 整合笔记
作者:bea
太简单了,但时间长了,记不得,浪费我半小时找资料,深刻体会好记性不如烂笔头!!今天把passport文挡贴上,防止以后忘记!!记住,网上找到自己需要的资料也要耗时间的!!!!!! Passport 通行证 整合第一篇:整合原理请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为 setting.gif (4.3 KB) 2006-9-30 13:59
太简单了,但时间长了,记不得,浪费我半小时找资料,深刻体会好记性不如烂笔头!!今天把passport文挡贴上,防止以后忘记!!记住,网上找到自己需要的资料也要耗时间的!!!!!!
Passport 通行证 整合
第一篇:整合原理
请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为
setting.gif (4.3 KB)
2006-9-30 13:59
第二步: 删除dz安装目录/forumdata/cache/cache_settings.php第三步: 重新访问论坛
登陆和注册整合流程用户从登陆或注册表单提交帐号密码信息 ==>主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>设置主站自身的cookie或session ==>url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php
整合之前请先仔细阅读官方passport技术文档:
http://www.discuz.net/usersguide/advanced_passport.htm
复制内容到剪贴板
代码:
<?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; //后面加上显示你的登陆表单的代码 如?><form action=login.php?act=login method=post>用户名:<input name=username>密码:<input name=password><input name=submit type=submit value=登陆></form><?php}//end functionfunction 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"); }//=============================================================//=============以下为拷贝过来的函数============================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);}//=========================================================================//===========================拷贝结束======================================?>
有用 | 无用
Passport 通行证 整合
第一篇:整合原理
请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为
setting.gif (4.3 KB)
2006-9-30 13:59
第二步: 删除dz安装目录/forumdata/cache/cache_settings.php第三步: 重新访问论坛
登陆和注册整合流程用户从登陆或注册表单提交帐号密码信息 ==>主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>设置主站自身的cookie或session ==>url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php
整合之前请先仔细阅读官方passport技术文档:
http://www.discuz.net/usersguide/advanced_passport.htm
复制内容到剪贴板
代码:
<?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; //后面加上显示你的登陆表单的代码 如?><form action=login.php?act=login method=post>用户名:<input name=username>密码:<input name=password><input name=submit type=submit value=登陆></form><?php}//end functionfunction 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"); }//=============================================================//=============以下为拷贝过来的函数============================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);}//=========================================================================//===========================拷贝结束======================================?>
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- PHP令牌 Token改进版
- php下intval()和(int)转换使用与区别
- PHP入门学习的几个不错的实例代码
- php通用检测函数集合
- php header()函数使用说明
- php下实现一个阿拉伯数字转中文数字的函数
- 兼容PHP5的PHP目录管理函数库
- php表单提交程序的安全使用方法
- php 防止单引号,双引号在接受页面转义
- 功能齐全的PHP发送邮件类代码附详细说明
- 使用PHP批量生成随机用户名
- 用PHP与XML联手进行网站编程代码实例
- PHP写入WRITE编码为UTF8的文件的实现代码
- PHP远程连接MYSQL数据库非常慢的解决方法
- php文本操作方法集合比较
- [原创]效率较高的php下读取文本文件的代码
- flash+php+mysql打造简单留言本教程
- php5中date()得出的时间为什么不是当前时间的解决方法
- 用PHP程序实现支持页面后退的两种方法