この問題に対する私の解決策は、ユーザーがアクティブな時間間隔の問題を抱えていることです。このアクティブな時間間隔を超えるものは、オフラインであると見なされます。後者はログインできます。後者がログインしていない場合でも、前者は再度ログインする必要はありません。なぜなら彼のセッションはまだ残っているからです。この時間はできるだけ小さく、より正確に設定することしかできませんが、絶対的なものではありません。
コードは投稿者の参考のために掲載されています。
関数 CheckOnline()
DIM IP、rsPrv、Sql、PrvDbState
PrvDbState = False
DBSTATE = False の場合
DbOpen()
PrvDbState = True
終了の場合
rsPrv=Server.CreateObject(ADODB.Recordset) を設定します。
If Session(UserName) = then
Sql=select * from [オンライン] where SessionID='& Session.Sessionid &'
rsPrv.Open SQL、Conn、1、3
rsPrv.Eof の場合
rsPrv.AddNew
rsPrv(セッションID) = セッション.セッションID
rsPrv(グループチャージLv) = -1
rsPrv(LastActTime) = Now()
rsPrv(ユーザーIP) = GetIP
rsPrv(オンラインタイム) = 0
rsPrv(UserWhere) = リクエスト.サーバー変数(HTTP_REFERER)
それ以外
rsPrv(UserWhere) = リクエスト.サーバー変数(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime) = Now()
終了の場合
rsPrv.Update
rsPrv.Close()
'response.Write notlogin
それ以外
'response.Write ログインしました
Sql=select * from [オンライン] where UserName='& Session(UserName) &'
rsPrv.Open SQL、Conn、1、3
rsPrv.Eof の場合
rsPrv.AddNew
rsPrv(セッションID) = セッション.セッションID
rsPrv(ユーザー名) = セッション(ユーザー名)
rsPrv(GroupChargeLv) = セッション(GroupChargeLv)
rsPrv(LastActTime) = Now()
rsPrv(オンラインタイム) = 0
rsPrv(ユーザーIP)= GetIP
rsPrv(UserWhere) = リクエスト.サーバー変数(HTTP_REFERER)
それ以外
rsPrv(SessionID) <> Session.SessionID および Application(LoginSet)(1) = False の場合
InfoLoginOut.asp へ、このアカウントは他の場所でログインしています。Web サイトでは ID ごとに 1 つのログインしか許可できません。後でログインを試行できます。
Response.End()
終了の場合
rsPrv(UserWhere) = リクエスト.サーバー変数(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime)=Now()
終了の場合
rsPrv.Update
rsPrv.Close()
終了の場合
rsPrv = なしを設定します
If DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) then
Application.Lock()
アプリケーション(OnLineLastDelete) = 現在
Application.UnLock()
Conn.ExeCute(delete from [Online] where datedIff('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'x 秒間非アクティブだった訪問者を削除します
終了の場合
PrvDbState = True の場合、DbClose()
終了機能