• discuz 整合总结


    一.首先将discuz的拓展设置里的通行证设置好.

    然后就可以通过下面的方法整合用户了.

    <?php

    /////////////////////////////////////////////////////////////////////////////////
    /**
    * 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() 函数返回值的 base64 编码结果
    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);

    }

    function JsWrite($msg)
    {
       echo "/n";
       echo $msg;
       echo "/n";
    }

    function JsGoto($url)
    {
       $msg = "location.href = '$url';";
       JsWrite($msg);
       exit;
    }

    $passport_key = '';

    $member = array
    (
    'cookietime' => time(),
    'time' => time(),
    'username' => 'username',
    'password' => md5('000000'),
    'email' => 'linjin@ine.net.cn',
    'credits' => '',
    'regip' => '',
    'regdate' => '',
    'msn' => ''
    );


    $action = 'login'; // 登录,注册
    //$action = 'logout'; // 退出
    $auth = passport_encrypt(passport_encode($member), $passport_key);
    $forward = 'http://210.51.167.119/bbs/index.php';
    $verify = md5($action.$auth.$forward.$passport_key);

    /*
    header("Location: http://127.0.0.1/bbs/api/passport.php".
    "?action=$action".
    "&auth=".rawurlencode($auth).
    "&forward=".rawurlencode($forward).
    "&verify=$verify");
    */


    JsGoto("http://127.0.0.1/bbs/api/passport.php".
    "?action=$action".
    "&auth=".rawurlencode($auth).
    "&forward=".rawurlencode($forward).
    "&verify=$verify");

    ?>

    二.直接利用disxuz的用户资源.

    <form id="loginform" method="post" name="login" action="../bbs/logging.php?action=login&amp;loginsubmit=true">
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td height="6" colspan="2" bgcolor="#EDEDED">
       
    <input name="forward" value="../../index.php" type="hidden">
    <input name="formhash" value="" type="hidden">
    <input name="cookietime" value="2592000" type="hidden">
    <input name="loginfield" value="username" type="hidden">

    </form>

  • 相关阅读:
    MySQL Workbench的安全更新模式
    IEnumerable<T>和IQueryable<T>区分
    Google 网站打不开
    使用 MVVMLight 命令绑定(转)
    使用 MVVMLight 绑定数据(转)
    安装/使用 MVVMLight(转)
    ?? 运算符(C# 参考)
    REST风格URL
    node+mysql 数据库连接池
    理解mysql执行多表联合查询
  • 原文地址:https://www.cnblogs.com/fengju/p/6173982.html
Copyright © 2020-2023  润新知