ユーザーが自分の Web サイトを 1 つのタブで開いてから、別のタブで開いているかどうかを検出しようとしています。これにより、新しく開いたタブでユーザーに警告が表示されます。
現在、「キープアライブ」ajax呼び出しを毎秒サーバーに送信しています。これにより、一意の ID を使用してデータベースに「最後にアクティブになった」時刻が記録されます。新しいページが読み込まれると、そのユーザー (userID で識別される) が過去 2 秒以内にアクティブであったかどうかがチェックされます。
これは非常に非効率に感じます。また、ユーザーがページを更新したときにもうまく機能しません。(2 秒もかかりません)。より遅い接続を可能にするために、キープアライブ呼び出しよりも 2 秒間のチェックを長くしました。
Q)これは正しい方法ですか、それとももっと簡単な方法はありますか? Gmail と Facebook が似たようなことをするかもしれないと聞きましたが、それを行うサイト機能が見つかりません。
実際のコードは多くの社内関数を使用しているため、一般的な考え方は次のとおりです。
擬似コード:
Page load;
[index] PHP: Save tabsessionid, userid, datecreated, lastactive, phpsessionid into database;
[index] JS: Every second, send tabsessionid to keepalive.php
[keepalive] PHP: Check if another session exists in the last 2 seconds
[keepalive] PHP: If exists -> Return "-1"; else -> return "1";
[keepalive] PHP: Update tabsessionid's last active time.
ここでいくつかの解決策を試しましたが、古いタブではなく新しいタブに警告することは、待ち時間/時間を抑えるという点で難しい部分のようです.