搜索
首页后端开发php教程php判断在线用户实例详解
php判断在线用户实例详解Apr 18, 2017 pm 03:37 PM
判断在线用户

怎么才能准确的判断用户是否在线呢?下面小编就来给大家分享一个实例。

解决了昨天的问题:表结果变了一下,如下:

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(&#39;oracle8conn.php&#39;);
$name=trim($name);
$pwd=trim($pwd);
ob_start();      //缓冲输出

 $stmtNick = OCIParse($conn,"select count(*) countnickname from tb_user where v_nickname=&#39;$name&#39;"); 

 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=&#39;$pwd&#39; and v_nickname=&#39;$name&#39;"); 
           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=&#39;$name&#39;"); 
       OCIExecute($stmtUid);
       while(OCIFetchInto($stmtUid,&$arrU,OCI_NUM)){
            $intOnlineUserID=$arrU[0];          
       }//while_Over    
    //如果该用户通过另一个浏览器重复登陆,解决如下 
       $stmOnlineFlag=OCIParse($conn,"select count(*) from tb_onlineuser where N_ONLINEUSERID=&#39;$intOnlineUserID&#39;");
       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=&#39;$intOnlineUserID&#39;"); 
                  OCIExecute($stmtSysID);
                  while(OCIFetchInto($stmtSysID,&$arrSysID,OCI_NUM)){
                      $SysID=$arrSysID[0];          
                   }//while_Over                                     //找完后踢出该用户 
                  $stmt = OCIParse($conn, "delete from tb_onlineuser where N_ONLINEUSERID=&#39;$intOnlineUserID&#39;");
                  OCIExecute($stmt);
                  print "删除成功";                                  //最后作记录备份
                  $tmpTime=time(); //结束时间
                  $DatLoginDate = date( "Y-m-d");//结束日期
                  $DatLoginDate = "to_date(&#39;".$DatLoginDate."&#39;,&#39;YY/MM/DD&#39;)";
                  $stmtUserCount = OCIParse($conn, "update tb_onlineusercount set D_OverDate=$DatLoginDate ,D_OverTime=$tmpTime where N_OnlineID=&#39;$SysID&#39;");//条件是相关联的系统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(&#39;".$DatLoginDate."&#39;,&#39;YY/MM/DD&#39;)";    
       $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
?>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Windows 11 上缺少本地用户和组:如何添加它Windows 11 上缺少本地用户和组:如何添加它Sep 22, 2023 am 08:41 AM

“本地用户和组”实用程序内置于“计算机管理”中,可以从控制台访问,也可以独立访问。但是,一些用户发现Windows11中缺少本地用户和组。对于可以访问它的一些人来说,该消息显示,此管理单元可能不适用于此版本的Windows10。若要管理此计算机的用户帐户,请使用“控制面板”中的“用户帐户”工具。该问题已在上一次迭代Windows10中报告,并且通常是由于用户端的问题或疏忽引起的。为什么Windows11中缺少本地用户和组?您运行的是Windows家庭版,本地用户和组在专业版及更高版本上可用。活动

探索Windows 11指南:如何访问旧硬盘驱动器上的用户文件夹探索Windows 11指南:如何访问旧硬盘驱动器上的用户文件夹Sep 27, 2023 am 10:17 AM

由于权限,并不总是可以访问某些文件夹,在今天的指南中,我们将向您展示如何在Windows11上的旧硬盘驱动器上访问用户文件夹。此过程很简单,但可能需要一段时间,有时甚至数小时,具体取决于驱动器的大小,因此请格外耐心并严格按照本指南中的说明进行操作。为什么我无法访问旧硬盘上的用户文件夹?用户文件夹的所有权属于另一台电脑,因此您无法对其进行修改。除了所有权之外,您对该文件夹没有任何权限。如何打开旧硬盘上的用户文件?1.取得文件夹的所有权并更改权限找到旧的用户目录,右键单击它,然后选择属性。导航到“安

教程:Ubuntu系统如何删除普通用户账户?教程:Ubuntu系统如何删除普通用户账户?Jan 02, 2024 pm 12:34 PM

Ubuntu系统添加了很多用户,想在不用的用户想要删除,该怎么删除呢?下面我们就来看看详细的教程。1、打开终端命令行,运用userdel命令删除指定的用户,注意要加sudo权限指令,如下图所示2、在删除的时候一定注意是在管理员目录下的,普通的用户是没有这个权限的,如下图所示3、删除指令执行完了以后怎么判断是否真正删除了呢?下面我们运用cat命令打开passwd文件,如下图所示4、我们看到passwd文件中已经没有了所删除的用户信息了,这证明用户已经被删除了,如下图所示5、然后我们进入home文件

Windows 11 KB5031455无法安装,导致某些用户出现其他问题Windows 11 KB5031455无法安装,导致某些用户出现其他问题Nov 01, 2023 am 08:17 AM

Microsoft开始推出作为Windows503145511H22或更高版本的可选更新向公众KB2。这是第一个默认启用Windows11Moment4功能的更新,包括受支持区域中的WindowsCopilot、对“开始”菜单中项目的预览支持、任务栏的取消分组等。此外,它还修复了Windows11的几个错误,包括导致内存泄漏的潜在性能问题。但具有讽刺意味的是,2023年&lt;&gt;月的可选更新对于尝试安装更新的用户甚至已经安装更新的用户来说都是一场灾难。许多用户不会安装此Wi

Win11 新版画图:一键移除背景实现抠图功能Win11 新版画图:一键移除背景实现抠图功能Sep 15, 2023 pm 10:53 PM

微软邀请Canary和Dev频道的WindowsInsider项目成员,测试和体验新版画图(Paint)应用,最新版本号为11.2306.30.0。本次版本更新最值得关注的新功能是一键抠图功能,用户只需要点击一下,就能自动消除背景,凸显画面主体,便于用户后续操作。整个步骤非常简单,用户在新版画图应用中导入图片,然后点击工具栏上“移除背景”(removebackground)按钮,就可以删除图片中的背景,用户也可以使用矩形来选择要消除背景的区域。

TranslucentTB不起作用:如何解决TranslucentTB不起作用:如何解决Jun 06, 2023 am 08:21 AM

TranslucentTB是寻求时尚简约桌面外观的Windows11爱好者广泛使用的工具,遇到了障碍。自从发布以来Windows11内部版本22621.1344(22H2)28年2023月日,TranslucentTB对大多数用户不起作用。此错误使用户努力应对其任务栏的有限自定义选项。用户在寻求克服这一挫折的解决方案时,挫败感显而易见。在最近的Windows11更新之后,TranslucentTB无法正常工作的问题已在多个在线平台上广泛报道,包括论坛和社交媒体。用户一直在分享他们的经验,拼命寻找

mysql 怎么修改hostmysql 怎么修改hostFeb 15, 2023 am 10:17 AM

mysql修改host的方法:1、通过“sudo service mysql stop”停掉mysql服务;2、以安全模式启动mysql,然后重置root密码;3、通过“update user set Host='%' where User='hive';”语句修改host即可。

如何下载iPhone地图以供离线使用如何下载iPhone地图以供离线使用Nov 04, 2023 pm 11:13 PM

随着iOS17的推出,Apple使iPhone用户可以下载地图以供离线使用。此功能为可能前往互联网连接不可靠或不存在的地区的用户提供了实用的解决方案。通过将地图下载到他们的设备上,用户可以确保即使失去蜂窝连接,他们也可以始终访问他们想要的路线。离线地图不仅仅是一个位置的静态图像。它们为用户提供了丰富的信息,例如地点的小时数和评级、转弯路线和预计到达时间。这意味着即使没有Wi-Fi或蜂窝连接,用户仍然可以导航和访问有关周围环境的关键信息。在“地图”中使用搜索功能打开“地图”应用,在搜索中搜索某个地

See all articles

热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.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境