<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      判斷在線用戶的方法

      [摘要]解決了昨天的問題:表結果變了一下,如下:CREATE TABLE TB_User ( --用戶表N_UserId Number(5)NOT NULL, --用戶IDV_NickNameVARCHAR...
      解決了昨天的問題:表結果變了一下,如下:
      CREATE TABLE TB_User ( --用戶表
      N_UserId Number(5)NOT NULL, --用戶ID
      V_NickNameVARCHAR2(10)NOT NULL, --昵 稱
      V_PWDVARCHAR2(10)NOT NULL,--密 碼
      V_TrueNameVARCHAR2(20), --姓 名
      Primary Key (N_UserId)
      )
      CREATE TABLE TB_OnlineUser ( --在線用戶
      N_OnlineUserId Number(5)NOT NULL, --在線用戶ID
       D_LoginTime Number (16), --登陸時間以秒計
       N_OnlineIDNumber(5), --與onlineusercount相關聯。
      Primary Key (N_OnlineID)
      )
      /
      CREATE TABLE TB_OnlineUserCount (--在線用戶統計表
      N_OnlineIDNumber(5)NOT NULL, --系統ID號
      N_OnlineUserId Number(5)NOT NULL, --在線用戶ID
      D_LoginDateDate ,--登陸日期
      D_LoginTime Number (16),--登陸時間以秒計
      D_OverDateDate,--結束日期
      D_OverTimeNumber (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'; 相差
      */

      ?>

      謝謝你的幫助。篲)




      日韩精品一区二区三区高清