0

データベースにユーザー ステータス フィールド (オンライン/オフライン) があります。その時点でユーザーがデータベースでログアウトボタンを押すと、オンラインからオフラインに変わります。ただし、ユーザーがログアウトせずにブラウザを直接閉じた場合、データベースを更新する方法。

4

1 に答える 1

1

サーバーに定期的に ping を送信するプロセスがない限り、それはできません。

ログアウト ボタンは、おそらくサーバーにリクエストを送り返します。そのリクエストを受信すると、サーバーはロジックを実行/委任してDBを更新します。ユーザーがログアウト ボタンをクリックせずにブラウザーを閉じた場合、サーバーはこの要求を受け取りません。

@Antonyは可能な解決策を提供しました。

別の可能な解決策は、特定の間隔でサーバーにメッセージを送信することです。サーバーはこの呼び出しを予期する必要があります。サーバーがメッセージを受信しない場合は、ユーザーをログアウト済みとしてマークします。ログアウトのタイムスタンプが間隔によってずれているという欠点があります。ログアウト時間は正確ではありません。詳細については、このスレッドを参照してください。タイマーを使用した Ajax 呼び出し

編集#1上記のリンクでは、JavaScriptコードを間隔を置いて実行する方法について説明しました。

setInterval(function() {
    //call $.ajax here
}, 5000); //5 seconds

あなたの場合、この関数を使用して API を呼び出します。

API は、JavaScript からの呼び出しを最後に受信したときのタイムスタンプを記録する必要があります。その特定のユーザーの記録がいつ停止するかを確認するための cron ジョブまたは別のロジックを用意します。最後のタイムスタンプは、ユーザーがログアウトしたおおよその時刻になります。

これは、ユーザーのログアウト動作を単純に追跡するための非常に複雑なプロセスです。手間をかける価値があるかどうかを検討することをお勧めします。

于 2013-03-29T07:25:45.747 に答える