-1

私は自分のウェブサイトのためにチャットをしていました。そのためには、オンラインの登録ユーザー数を見つける必要があります。セッションの数を数えてテーブルに保存します。ログアウトすると、その名前がそのテーブルから削除されます。ログアウトをクリックせずにタブを直接閉じても、オフラインにはなりません。彼らの名前はまだテーブルに存在します。それらを削除するために、オンラインで非常に複雑なアルゴリズムを見つけました。5 分ごとにそのテーブルを空にし、オンラインになっている人の名前を再度追加します。しかし、問題は、これが発生している間、チャットが中断されることです。だから私はこの問題を解決する方法が必要です

4

4 に答える 4

4

「最終アクティブ」の列を追加します。ユーザーがなんらかのアクション (たとえば、AJAX を介してより多くのメッセージをポーリングするブラウザーを含む) を実行するたびに、その列を に更新しますNOW()。次に、アクティブなユーザーを見つけるためのクエリは次のようになります。

SELECT user.name FROM user
    WHERE DATE_ADD(user.last_active, INTERVAL 5 MINUTE) >= NOW();

テーブルから古いレコードを削除することは問題ありませんが、おそらくオプションの拡張機能です (サイトの負荷によって異なります)。

于 2012-06-11T15:08:22.113 に答える
1

たぶんこれを調べてください:ウィンドウを閉じるときにセッションを破棄しますか?

セッションを破棄する代わりに、行を削除するクエリを実行できます。

于 2012-06-11T15:09:18.503 に答える
0

セッションを db テーブルに保存すると、アクティブなセッションを簡単に確認できます。php のマニュアルhttp://in.php.net/manual/en/function.session-set-save-handler.phpを確認してください。

于 2012-06-11T15:46:39.873 に答える
0

2つの解決策があると思います。

1.) タイムスタンプを保存し、cronjob を作成します。cron は 1 分ごとまたは 2 分ごとにエントリの古さをチェックし、たとえば 5 分より古いエントリを削除します。

2.) 2 番目の方法は、ポイント 1 と同じことを行いますが、すべてのページ呼び出しで関数を実行する関数を作成します。しかし、これは実際には効率的ではなく、多くの負荷がかかります。

于 2012-06-11T15:08:37.257 に答える