zoukankan      html  css  js  c++  java
  • 本地会员与新浪微博api绑定和同步登陆

    说明:此设计仅为我个人简单的制作。没有考虑安全因素、bug、效率等。仅限于学习本地会员同步新浪微博登陆。

    附:伸手党可到csdn资源下载源码。包含源码文件、数据库文件以及使用方法

    csdn资源下载网址:http://download.csdn.net/detail/x171306523c/4957607

    1、先设计了一个简单的mysql数据库表

    CREATE TABLE IF NOT EXISTS `user2` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `api` int(1) NOT NULL DEFAULT '0',
      `username` varchar(128) NOT NULL,
      `passwd` varchar(32) NOT NULL,
      `access_token` varchar(32) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    id为主键,不用说了

    api记录是不是微博用户以及时哪个微博。比如规定api=0不是微博用户。api=1新浪微博用户。api=2腾讯微博。api=3 QQ账号

    username用户名

    passwd密码

    access_token微博的access_token是微博用户,则记录微博的access_token值


    2、文件目录


    3.1、数据库连接文件conn.php

    <?php
    header('Content-Type: text/html; charset=UTF-8');
    mysql_connect("127.0.0.1","root","");//这是我的数据库地址、用户名、密码
    mysql_select_db("zzz");//这是我的数据库名
    mysql_query("set names 'utf-8'");
    session_start();
    ?>

    3.2、index.html两个文件入口,一个是登录,一个是注册

    <a href="login.php">login</a><br>
    <a href="reg.php">reg</a>

    3.3、login.php登录、退出页面

    <?php
    session_start();
     include("conn.php");
     
     if(!empty($_POST['sub'])){
       $u = trim($_POST['user']);
       $p = md5($_POST['pass']);   
     $sql="select * from user2 where `username`='$u' && `passwd`='$p'";
     $query=mysql_query($sql);
     $rs = mysql_fetch_array($query);
       if($rs[0]){
        $_SESSION['uid']=$rs['id'];
        echo "<script>alert('登陆成功');location.href='my.php'</script>";
       }else{
        echo "登陆失败";
       }
       
     }
    
     //==================退出登录
     if($_GET['action'] == "logout"){
         unset($_SESSION['uid']);
     
         echo '注销登录成功!点击此处 <a href="login.php">登录</a>';
         exit;
     }
     
     //已经是登录状态
     if ($_SESSION['uid']){
         echo "您已经登录,请进入<a href='my.php'>用户中心</a>";
     }else {
         echo "
         <form action='' method='post'>
         用户<input type='text' name='user' ><br>
         密码<input type='password' name='pass'> <br>
         <input type='submit' name='sub' value='login'>
         </form>
         <a href='weibo/'>使用微博账号登陆</a><br><br>
         <a href='reg.php'>还没有注册?点击此处</a>
         ";
     }
     
     
    ?>

    有三种情况

    一、正常登录,点击按钮后检测用户名、密码是否正确,正确则跳转到用户中心页面,否则提示错误

    二、退出,action==logout时销毁$_SESSION['uid'],退出成功

    三、已经是登录状态,又进入到login.php页面,提示已是登录状态


    3.4、my.php用户中心

    <?php
     include("conn.php");
     if(!empty($_SESSION['uid'])){
         $sql="select * from user2 where id='".$_SESSION['uid']."'";
         $query=mysql_query($sql);
         $rs = mysql_fetch_array($query);
         echo "欢迎".$rs['username']."登陆成功!<br> 我的md5密码是:".$rs['passwd']."<a href=login.php?action=logout>退出</a><br><br>";
         if (empty($rs['access_token'])){
             echo "<a href='weibo'>绑定微博</a>";
         }else {
             echo "已经绑定微博";
         }
     }else{
         echo "登陆失败,请重新<a href=login.php>登陆</a>";
     }
    
    ?>

    判断$_SESSION['uid']是否为空,空则没有登录,否则为登录

    判断$rs['access_token']是否为空,为空则没有绑定微博,否则为已经绑定了微博


    3.5、reg.php注册页面

    <?php
    session_start();
     include("conn.php");
     
     if(!empty($_POST['sub'])){
       $u = trim($_POST['user']);
       $p = md5($_POST['pass']);   
       $sql_1 = "INSERT INTO `zzz`.`user2` (`username`, `passwd`";//INSERT INTO `zzz`.`user2` (`username`, `passwd`) VALUES ('$u', '$p')
       if ($_GET['reg'] == "api"){
           $sql_2 = ", `api`, `access_token`";
           $access_token = $_SESSION['token']['access_token'];
           $sql_3 = ", '1', '$access_token'";
       }else {
           $sql_2 = "";
           $sql_3 = "";
       }
       $sql = $sql_1.$sql_2.") VALUES ('$u', '$p'".$sql_3.")";
       //echo $sql;
       $query=mysql_query($sql);
       if($query){
        $log_sql="select * from user2 where `username`='$u' && `passwd`='$p'";
        $log_query=mysql_query($log_sql);
        $log_rs = mysql_fetch_array($log_query);
        $_SESSION['uid']=$log_rs['id'];
        echo "<script>alert('注册成功');location.href='my.php'</script>";
       }else{
        echo "注册失败";
       }
       
     } 
     
     if ($_GET['reg'] == "api"){
         $weibo_reg = " style=\"display:none\"\;";
         echo "您好!".$_GET['username']."<br>";
         
     }
    
    ?>
    <form action="" method="post">
    用户<input type="text" name="user" value="<?php echo $_GET['username']?>" ><br>
    密码<input type="password" name="pass"> <br>
    <input type="submit" name="sub" value="reg">
    </form>
    <a<?php echo $weibo_reg;?> href='weibo/index.php?do=reg'>使用微博账号注册</a>

    注册分为2种,1、网站注册,2、微博注册

    4、weibo文件夹为新浪api的sdk。可从网上下载

    下载地址 http://open.weibo.com/wiki/SDK    选择PHP SDK下载即可


    4.1、callback.php没有修改。


    4.2、config.php  将WB_AKEY、WB_SKEY、WB_CALLBACK_URL设置成自己的即可

    define( "WB_AKEY" , '**********' );
    define( "WB_SKEY" , '*****************************' );
    define( "WB_CALLBACK_URL" , 'http://***************/callback.php' );

    申请地址:http://open.weibo.com/index.php

    登陆后点管理中心→添加网站→输入相应的信息后选择验证方式,通过验证后得到App Key、App Secret、

    WB_CALLBACK_URL为下载的sdk里的callback.php文件所在的url


    4.3、index.php

    因为考虑到微博注册,所以我将$_SESSION['do']赋值为reg

    在 include_once( 'saetv2.ex.class.php' ); 下面添加如下代码

    if ($_GET['do'] == "reg"){
        $_SESSION['do'] = "reg";
    }

    4.4、saetv2.ex.class.php没有修改


    4.5、weibolist.php可以复制weibolist.php并改文件名为weibolist.php.bak作为备份

    <?php
    header("Content-type:text/html;charset=utf-8");
    session_start();
    include("../conn.php");
    include_once( 'config.php' );
    include_once( 'saetv2.ex.class.php' );
    
    $sql = "select * from `user2` where `access_token` = '{$_SESSION['token']['access_token']}'";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res);
    
    
    //使用微博登陆
    if (!empty($row['access_token']) && empty($_SESSION['uid'])){//!empty($row['access_token'])该微博已经绑定了账号,empty($_SESSION['uid'])没有使用账号登录        使用微博登陆
        $_SESSION['uid'] = $row['id'];
        header("Location: ../my.php");
        exit;
    }else if (!empty($row['access_token']) && !empty($_SESSION['uid'])){//该微博已经绑定过了
        echo "该微博已经绑定了其他账号。绑定失败!<a href=\"../my.php\">返回用户中心</a>";
    }else if (empty($row['access_token']) && !empty($_SESSION['uid'])){//微博账号没有绑定并且使用了本地账号登录
        //进行绑定
        $bd_sql = "update `user2` set `access_token` = '{$_SESSION['token']['access_token']}', `api` = '1' where `id`={$_SESSION['uid']}";
        mysql_query($bd_sql);
        header("Location: ../my.php");
        exit;
    }else if (empty($row['access_token']) && empty($_SESSION['uid']) && $_SESSION['do'] == "reg"){//微博没有绑定并且本地账号没有登录,使用微博注册
        unset($_SESSION['do']);
        $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['token']['access_token'] );
        $c->set_debug( DEBUG_MODE );
        $uid_get = $c->get_uid();
        $uid = $uid_get['uid'];
        $user_message = $c->show_user_by_id( $uid);//根据ID获取用户等基本信息
        header("Location: ../reg.php?reg=api&username=".$user_message['screen_name']);
        exit;
    }else if (empty($row['access_token']) && empty($_SESSION['uid'])){//微博没有绑定并且本地账号没有登录
        echo "用户不存在,<a href=\"../login.php\">返回登录页面进行注册</a>".$_SESSION['do'];
    }
    
    
    
    ?>

    五种情况(我暂时考虑到五种)

    第一:使用微博登陆,即$row['access_token']不为空,$_SESSION['uid']为空

    第二:绑定微博,使用本地会员登陆,但是微博已经于其他账号绑定,绑定失败。即empty($row['access_token']不为空,empty($_SESSION['uid']不为空

    第三:绑定微博,使用本地会员登陆,微博没有绑定其它护院,绑定成功。即empty($row['access_token']为空,empty($_SESSION['uid']不为空

    第四:使用微博注册,即$row['access_token']为空,empty($_SESSION['uid']为空,$_SESSION['do']为reg(4.3的index.php赋的值)

    第五:微博登陆,但是该微博没有绑定本地账号。$row['access_token']为空,$_SESSION['uid']为空


     附:伸手党可到csdn资源下载源码。包含源码文件、数据库文件以及使用方法

    csdn资源下载网址:http://download.csdn.net/detail/x171306523c/4957607

  • 相关阅读:
    第一个vbscript程序
    判定VBscript方法是否存在
    我的模块加载系统 v24
    libnet/libnids库函数介绍
    程序员应知道的12件事
    基于poll实现的echo服务器
    师者
    OSI/RM参考模型和TCP/IP协议的关系
    TCP(虚电路)和UDP的区别
    python中 __name__及__main()__的妙处
  • 原文地址:https://www.cnblogs.com/xcxc/p/2844129.html
Copyright © 2011-2022 走看看