現在のオンラインユーザーをカウントするソリューション
オンライン通信Webサイトを構築するとき、私は非常に困っていると感じる問題があります。これは、オンラインユーザーのリアルタイム統計に関するものです。顧客の要件:現在のオンラインユーザーの数、観光客の数、メンバー数、および観光客、メンバー、管理者を含むオンラインユーザーのリストを数えます(観光客の場合、観光客のIDが自動的に生成され、メンバーである場合、メンバー名が表示されます)。リアルタイムが必要なので、最初にGlobal.asaで解決するというアイデアを渡します。
問題の鍵は、ユーザーが去ったことをどのように伝えるか、ユーザーが去ったときにファイルまたは関数を実行する方法です。
オンラインで友人と話し合った後、この問題はついに解決されました。
解決策は、一般的なページを書くことです。いわゆる一般的なページは、アプリケーション内の各ページにこのページが含まれていることを意味します。たとえば、header.aspです。このページでは、xmlhttpを使用してコードを記述します。このコードの目的は、10秒または20秒ごとにサーバーにリクエストを送信することです。目的は、現在のユーザーのオンライン時間を更新し、オンライン時間が一定期間を超えたユーザーを削除して、データベース内のオンラインユーザーレコードが特定のリアルタイムを維持するようにすることです。
主な実装方法は次のとおりです。
新しいデータベースを作成すると、フィールド名は次のとおりです。id(文字)、名前(文字)、ユーザー(number)tt(date)、admin(許可コード、0-ORDINARYユーザー、1-ADMIN)
テーブル名:オンライン
header.asp↓
=====================================================================================================================
<%
......
ifsession( "s_in")<> 1andsession( "s_name")= "" then'ifユーザーが初めてログインしている場合
rs.open "select*fromline"、conn、3,3
rs.addnew
rs( "id")= session.sessionid
rs( "name")= "guest"&session.sessionid
rs( "user")= 0'0は、ユーザーがログインされておらず、観光客の身元であることを意味します
rs( "tt")= now
rs.update
rs.close
session( "s_in")= 1'setユーザーの情報はデータベースに保存されており、オンラインであったことを示しています
endif
ifsession( "s_name")<> ""それからユーザーがログインボックスを介してログインした場合
rs.open "select*fromlinewhereid = '"&session.sessionid& "'"、conn、3,3
rs( "name")= session( "s_name")
rs( "admin")= session( "s_admin") 'ユーザーの名前をメンバー名に更新します
rs( "user")= 1 'は、ユーザーがログインし、メンバーであることを意味します
rs( "tt")= now'ユーザーのログイン時間まで現在のシステム時間を設定します
rs.update
rs.close
endif
......
%>
......
<head>
......
<ScriptLanguage = JavaScript>
functionTest()
{
varxmlhttp = newActiveXObject( "msxml2.xmlhttp");
xmlhttp.open( "post"、 "nowsonline.asp"、false); // woneonline.aspに更新要求を送信します
xmlhttp.setRequestheader( "content-type"、 "application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval( "test();"、10); // 10秒で更新リクエストを送信します
</script>
......