日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

判斷在線用戶的辦法

判斷在線用戶的辦法

更新時間:2022-05-07 文章作者:未知 信息來源:網絡 閱讀次數:

解決了昨天的問題:表結果變了一下,如下:
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'; 相差
*/

?>

謝謝你的幫助。篲)

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 草草影院欧美三级日本 | 99久久成人国产精品免费 | 日本.www| 亚洲成人99 | 亚洲丁香婷婷综合久久小说 | 亚洲区一区 | 日本一区二区三区精品国产 | 精品小视频在线观看 | 超级碰碰碰视频在线观看 | 免费公开视频人人人人人人人 | 四虎影院精品在线观看 | 亚洲人成网站看在线播放 | 久久久精品国产四虎影视 | 国内国内在线精品视频 | 亚洲国产成人91精品 | 草草视频在线观看 | 伊人网狼人 | 国产男女乱淫真视频全程播放 | 亚洲四区 | 精品久久久久久久 | 欧美黑人xxxxww | 伊人久久大香线蕉综合影 | 国产步兵社区视频在线观看 | 天天澡夜夜澡狠狠澡 | 男女男精品网站免费观看 | 色综合色综合色综合网址 | 偷偷久久| 怡红院精品视频 | 久久久久久毛片免费观看 | 青青青国产精品国产精品美女 | 福利一区二区在线 | 一区视频在线播放 | 久久精品5| 久久免费观看国产精品 | 久久久伊香蕉网站 | 成人午夜免费剧场 | 四虎精品影院永久在线播放 | 成人爱爱网站在线观看 | 久久riav二区三区 | 国产欧美久久一区二区 | 欧美性猛交xxxx免费看 |