0

ページを閉じるときにユーザーをログアウトするためにこのコードを使用していますが、ユーザーは他のリンク (同じ Web サイト) をクリックしたときにもログアウトします。

  $( window ).unload(function() {
    $.ajax({url:"?logout&leave=yes", async:false})
  });

リンク ナビゲーションと実際のページ クローズを区別する方法はありますか?

編集:

現在、このソリューションを実装していますが、ページのリロードを検出できません

  $('a').click(function(){
      var url = $(this).attr("href");
      window.onbeforeunload = null;
      $(window).unbind('beforeunload');
      window.location = url;
  });
4

4 に答える 4

5

次の解決策を試してください。

<script>
$(window).bind('click', function(event) {
    if(event.target.href) 
        $(window).unbind('beforeunload');
});
$(window).bind('beforeunload', function(event) {
    $.ajax({url:"?logout&leave=yes", async:false});
});
</script>

また

var logOutFlag = true;
$('a').click(function(){
    logOutFlag = false;
});
$(window).bind('beforeunload', function(event) {
    if(logOutFlag){
         $.ajax({url:"?logout&leave=yes", async:false});   
    }
});
于 2013-10-26T19:45:29.160 に答える
4

この質問は何度か聞かれました:

javascript はブラウザのタブを閉じる/ブラウザを閉じる
を検出する javascript または php を使用してウィンドウを閉じるイベントを検出する方法タブが閉じ られ、他の多くのタブを見つけることができる
場合は、自動ログアウトします。

簡単に言えば、できません。他の回答が言うように:実際には、タブを閉じるときにユーザーがログアウトしたくないという正当なケースが他にもたくさんあります(同じサイトを2つのタブで開いたり、ブックマークをクリックしたり、ナビゲーションバーでURLを手動で変更したり... )。

ユーザーがログアウトしたいかどうかを検出する唯一の方法は、ページに「ログアウト」ボタンを配置することです。
それ以外の場合は、セッションのタイムアウト メカニズムを管理する必要があります (例: サーバー側では、非アクティブ状態が 30 分間続くとセッションを削除します)。

于 2013-10-29T10:01:36.763 に答える
1

ユーザーがページを離れたときにどこに行きたいかを知る方法はありません。

クリック時に手動でイベントのバインドを解除する代わりに、フラグを設定し、unloadこのフラグが設定されている場合はコールバックで AJAX リクエストをスキップできます。また、$(window).unload()は非推奨であり、 に置き換える必要があることに注意してください$(window).on('unload', function() {})

私が考えることができる唯一の解決策は、ページの Cookie (または LocalStorage) にunload値を設定し、この値がページの読み込み時に設定されているかどうかを確認することです。しかし、ユーザーがアプリを離れたときにのみ AJAX リクエストを送信したい場合、それはうまくいきません。

残念ながら、私たちはXY 問題に直面しています。ユーザーが非アクティブになるとすぐに適切にログアウトするように、サーバー側である種のタイムアウトを設定できませんか? リンクのトリックを使用しても、ユーザーが複数回ログインしている場合、新しいウィンドウ/タブを開いている場合、または単にページをバックグラウンドで実行させている場合、現在のソリューションは機能しません。

于 2013-10-26T19:50:17.943 に答える