搜索
首页php教程php手册判断在线用户的方法

在线

解决了昨天的问题:表结果变了一下,如下:
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

?>

/*-------CheckSession-----检查刷新程序---*/

/*30分钟刷新程序
  先统计出在线的用户数,如果没有在线用户,系统要保证一个系统指定用户。该系统用户时时在线的原因是保证该刷新程序的执行
  如果该登陆用户Session不存在了,表示用该用户离线。统计出时间。
*/
  session_start();
  require('oracle8conn.php');
  print $objsNickName;
?>
  



$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."
";
//判断在线否?
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    for($a=0;$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."
";
         print "数据库中旧时间:".$arrTest[$b][1]."
";
         print "用户ID:".$arrTest[$b][0]."
";
         print "相差时间:".ceil(($NowTime-$arrTest[$b][1])/60)."
";
     }  
   }
}

/*如果要欢察统计表与在线表用户时间(当用户未离线时)
  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'; 相差
*/

?>

                      谢谢你的帮助!:_)



声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。