• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 判斷在線用戶的方法

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    解決了昨天的問題:表結果變了一下,如下: CREATE TABLE TB_User (--用戶表 N_UserIdNumber(5)NOT NULL,--用戶ID V_NickNameVARCHAR2(10)NOT NULL,--昵稱 V_PWDVARCHAR2(10)NOT NULL,--密碼 V_TrueNameVARCHAR2(20),--姓名 Primary Key (N_UserId) ) CREATE
    解決了昨天的問題:表結果變了一下,如下:
    CREATE TABLE TB_User (       --用戶表
    N_UserId   Number(5)      NOT NULL,       --用戶ID
    V_NickName  VARCHAR2(10)  NOT NULL,       --昵   稱
    V_PWD      VARCHAR2(10)  NOT NULL,        --密   碼
    V_TrueName  VARCHAR2(20),                 --姓   名
    Primary Key (N_UserId)
    )
    CREATE TABLE TB_OnlineUser ( --在線用戶
    N_OnlineUserId Number(5)      NOT NULL,   --在線用戶ID
         D_LoginTime   Number (16),       --登陸時間以秒計
         N_OnlineID    Number(5),   --與onlineusercount相關聯。
        Primary Key (N_OnlineID)
    )
    /
    CREATE TABLE TB_OnlineUserCount (  --在線用戶統計表
    N_OnlineID    Number(5)      NOT NULL,   --系統ID號
    N_OnlineUserId Number(5)      NOT NULL,   --在線用戶ID
    D_LoginDate    Date                   ,          --登陸日期
    D_LoginTime   Number (16)    ,    --登陸時間以秒計
    D_OverDate      Date    ,          --結束日期
    D_OverTime    Number (16)             ,    --結束時間
         Primary Key (N_OnlineID)
    )
    /

    /*---LoginselectNew.php---該程序是登陸檢查程序----*/
    <?
    session_start();
    /*思路:首先用戶登陸,判斷是否有該用戶,判斷是否密碼通過,否則返回參數進行特殊處理。(登陸不成功)
      登陸成功后,如果該用戶不在線(一般不在線,特殊情況如果他用另一臺機器打開瀏覽器重新再登陸,那么他有可能在線),
      先進行session變量注冊,取得相應條件向1.統計表與2.在線表中插數據。進入到登陸頁。
      如果用戶在線:先取得在線用戶的系統ID,因為在備份該用戶離開時有用。接著刪除該在線用戶.接著進行該用戶離開時間的備份.
    */
    session_register("objsNickName");
    require('oracle8conn.php');
    $name=trim($name);
    $pwd=trim($pwd);
    ob_start();      //緩沖輸出
    $stmtNick = OCIParse($conn,"select count(*) countnickname from tb_user where v_nickname='$name'");
    OCIExecute($stmtNick);
       while(OCIFetchInto($stmtNick,&$arrN)){
         if ($arrN[0]==0){
               Header("Location:Logintest.php?Msg=1");
         }else{
               //用戶名通過
               unset($arrNickName);           //撤消臨時數組
               $stmtPwd = OCIParse($conn,"select count(*) countpwd from tb_user where v_pwd='$pwd' and v_nickname='$name'");
               OCIExecute($stmtPwd);
                while(OCIFetchInto($stmtPwd,&$arrP,OCI_NUM)){
                  if ($arrP[0]==0){
                     Header("Location:Logintest.php?Msg=2");
                }else{//密碼通過
        //取出用戶的ID號
           $stmtUid = OCIParse($conn,"select n_userID from tb_user where v_nickname='$name'");
           OCIExecute($stmtUid);
           while(OCIFetchInto($stmtUid,&$arrU,OCI_NUM)){
                $intOnlineUserID=$arrU[0];          
           }//while_Over    
        //如果該用戶通過另一個瀏覽器重復登陸,解決如下
           $stmOnlineFlag=OCIParse($conn,"select count(*) from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
           OCIExecute($stmOnlineFlag);     
           while(OCIFetchInto($stmOnlineFlag,&$arronlineFlag,OCI_NUM)){
                  if ($arronlineFlag[0]!=0){                               //表示已經在線
                                                                          //先取到在線用戶關聯系統ID
                      $stmtSysID= OCIParse($conn,"select N_ONLINEID from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
                      OCIExecute($stmtSysID);
                      while(OCIFetchInto($stmtSysID,&$arrSysID,OCI_NUM)){
                          $SysID=$arrSysID[0];          
                       }//while_Over                                     //找完后踢出該用戶
                      $stmt = OCIParse($conn, "delete from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
                      OCIExecute($stmt);
                      print "刪除成功";                                  //最后作記錄備份
                      $tmpTime=time(); //結束時間
                      $DatLoginDate = date( "Y-m-d");//結束日期
                      $DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";
                      $stmtUserCount = OCIParse($conn, "update tb_onlineusercount set D_OverDate=$DatLoginDate ,D_OverTime=$tmpTime where N_OnlineID='$SysID'");//條件是相關聯的系統ID
                      OCIExecute($stmtUserCount);
                      print "添加成功到統計表中。";
                    }//endif                                              //不在線正常注冊
           $objsNickName=$name; //注冊Session變量
           unset($arrPwd);             //撤消臨時數組
           srand((double)microtime()*1000000000);
           $intOnlineID = rand();              //取一個系統ID號
           $DatLoginDate = date( "Y-m-d");    //取得系統日期存入到Online表中去。
           $DatLogintime = time();           //取系統時間
           $DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";    
           $stmt = OCIParse($conn, "insert into tb_onlineuser (N_OnlineUserId,D_LoginTime,N_OnlineID) values ($intOnlineUserID,$DatLogintime,$intOnlineID)");
           OCIExecute($stmt);
           $stmtC = OCIParse($conn, "insert into TB_OnlineUserCount (N_OnlineID,N_OnlineUserId,D_LoginDate,D_LoginTime) values ($intOnlineID,$intOnlineUserID,$DatLoginDate,$DatLogintime)");
           OCIExecute($stmtC);
           Header("Location:index.php");  //成功登陸!
              }//whileOVER
            }//end if
          }//while_Over
        }//end if
    }//while_Over

    ?>
    <?ob_end_flush();?>
    /*-------CheckSession-----檢查刷新程序---*/
    <?
    /*30分鐘刷新程序
      先統計出在線的用戶數,如果沒有在線用戶,系統要保證一個系統指定用戶。該系統用戶時時在線的原因是保證該刷新程序的執行
      如果該登陸用戶Session不存在了,表示用該用戶離線。統計出時間。
    */
      session_start();
      require('oracle8conn.php');
      print $objsNickName;
    ?>
      <html><head><meta HTTP-EQUIV=refresh Content='1800;url="CheckSession.php"'>
    <?
    $NowDate = date("Y-m-d");
    $NowDate = "to_date('".$NowDate."','YY/MM/DD')";
    $NowTime = time();
    //統計在線人數。30分鐘更新一次
    $stmtCount = OCIParse($conn,"select count(*) from tb_onlineuser");
    OCIExecute($stmtCount);
    while(OCIFetchInto($stmtCount,&$arrCountUser)){
    $CountUser=$arrCountUser[0];
    }
    print "目前在線人數為:".$CountUser."<br>";
    //判斷在線否?
    if ($CountUser==0){
       print "沒有人在線!特殊處理!";
    }else{
    $stmtOnlineUser = OCIParse($conn,"select N_OnlineUserId,D_LoginTime,N_OnlineID from tb_onlineuser");
    OCIExecute($stmtOnlineUser);
    $arrTest = array();
    while(OCIFetchInto($stmtOnlineUser,&$arrUser[])){
        $arrTest += $arrUser;
    }
    $j = sizeof($arrTest);
    if($j>0){
        $i = sizeof($arrTest[0]);     
      }
    }    
       for($b=0;$b<$j;$b++){  //因為存入二維數組中,所以雙重循環。
        for($a=0;$a<1;$a++){ //內循環一次找到時間。
        //注意雙循環中是為了取數組值
        // $arrTest[$b][0]  表示用戶ID
        // $arrTest[$b][1]  表示登陸起的時間
        // $arrTest[$b][1]  關聯系統ID
         if  (ceil(($NowTime-$arrTest[$b][1])/60)>300){ //如果當前時間與一條記錄的舊時間相差大于30分鐘。
             if ($objsNickName==""){  //如果此用戶session不存在,表示已經退出。
             //刪掉。
              $temGlid= $arrTest[$b][2];   //關聯系統ID
              $temuserid= $arrTest[$b][0]; //用戶ID
              $stmt = OCIParse($conn, "delete from tb_onlineuser where $intOnlineID='$temGlid' and N_ONLINEUSERID='$temuserid'");
              print  "delete from tb_onlineuser where $intOnlineID='$temGlid' and N_ONLINEUSERID='$temuserid'";
              OCIExecute($stmt);
              print "刪除成功";
             //添加到統計表中
              $tmpTime=time(); //結束時間
              $DatLoginDate = date( "Y-m-d");//結束日期
              $DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";
              $stmtUserCount = OCIParse($conn, "update tb_onlineusercount set D_OverDate=$DatLoginDate ,D_OverTime=$tmpTime where N_OnlineID='$temGlid'");//條件是相關聯的系統ID
              OCIExecute($stmtUserCount);
              print "添加成功到統計表中。";
             }else{
              $tmpTime=time(); //取得臨時用戶時間
              $temuserid= $arrTest[$b][0];
              $stmt = OCIParse($conn, "update tb_onlineuser set d_logintime=$tmpTime where N_ONLINEUSERID='$temuserid'");
              OCIExecute($stmt);
              print "更新成功";
              print $tmpTime;
            }
            }else{
             print session_id();
             print "系統時間:".$NowTime."<br>";
             print "數據庫中舊時間:".$arrTest[$b][1]."<br>";
             print "用戶ID:".$arrTest[$b][0]."<br>";
             print "相差時間:".ceil(($NowTime-$arrTest[$b][1])/60)."<br>";
         }  
       }
    }

    /*如果要歡察統計表與在線表用戶時間(當用戶未離線時)
      select a.D_Logintime,b.D_logintime from tb_onlineuser a,tb_onlineusercount b
      where a.N_OnlineID=b.N_ONLINEID; 相差
       如果要統計出指定用戶在線時間(當用戶離線時)
      select D_logintime,D_OverTime from tb_onlineusercount where N_OnlineUserId='$USERID'; 相差
    */

    ?>

                          謝謝你的幫助?。篲)

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>