源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

discuz Passport 通行证 整合笔记

  • 时间:2020-07-25 17:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:discuz Passport 通行证 整合笔记
太简单了,但时间长了,记不得,浪费我半小时找资料,深刻体会好记性不如烂笔头!!今天把passport文挡贴上,防止以后忘记!!记住,网上找到自己需要的资料也要耗时间的!!!!!! [h1]Passport 通行证 整合[/h1][b]第一篇:整合原理[/b] 请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理 解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为 [img]http://files.jb51.net/upload/20080630091027926.gif[/img] [img]http://files.jb51.net/upload/20080630091027176.gif[/img]
[img]http://files.jb51.net/upload/20080630091027934.gif[/img] [url=http://www.discuz.net/attachment.php?aid=77703¬humb=yes][b]setting.gif[/b][/url] (4.3 KB)
2006-9-30 13:59
第二步: 删除dz安装目录/forumdata/cache/cache_settings.php 第三步: 重新访问论坛
[b]登陆和注册整合流程[/b] 用户从登陆或注册表单提交帐号密码信息 ==> 主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==> 设置主站自身的cookie或session    ==> url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php 整合之前请先仔细阅读官方passport技术文档: [url=http://www.discuz.net/usersguide/advanced_passport.htm]http://www.discuz.net/usersguide/advanced_passport.htm[/url]
复制内容到剪贴板
代码:
[code]<?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 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");                         } //============================================================= //=============以下为拷贝过来的函数============================ 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); } //========================================================================= //===========================拷贝结束====================================== ?>[/code]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部