2016-09-25 3 views
0

は、私は2つのシナリオを検討:「logout.php」と呼んでハイパーリンクを「ログアウト」のウェブアプリケーションを正しくログアウトするには?

  1. ユーザーのクリックを、
  2. ユーザーはタブ(ウィンドウ)を閉じたり、ブラウザを閉じて(つまりは簡単です)。

ここで私は何をすべきかわかりません。 イベントがあります:(ないテスト)のように、おそらく使用することができますwindow.onunload

<script> 
    var logout_php = function() { 
     var xhttp = new XMLHttpRequest(); 
     xhttp.open("GET", "logout.php", true); 
     xhttp.send(); 
    } 

    window.onunload = logout_php ; 
</script> 

しかし、ユーザーが複数のタブを開いて、その中の1つだけを閉じたときに、彼がログアウトされますが。おそらく誰かが同じページをリフレッシュするときにもログアウトします。

開かれたすべてのタブを同じドメインアドレスで数えると考えましたが、残っているタブが1つしかない場合は、最終的なログアウトになります。しかし、ブラウザで開いた別のウィンドウ(タブ)にアクセスできないため、これは不可能です。

私は確かに、それは一般的な問題でなければなりませんが、私は適切な答えを見つけることができません。

thanx

+0

通常、Webアプリケーションはセッションの有効期限に依存しています。 – bcmcfc

答えて

0

セッションは、これらの種類の処理に使用されます。あなたがログアウトした場合、あなたのセッションは破壊され、誰かが直接ウィンドウを閉じると、その場合にもセッションは破壊されます。したがって、セッションを使用している限り、心配することはありません。

+0

私はセッションを使用していますが、手動でそれらを破壊する必要があると思いました。ログアウト時にセッションを破棄しますが、ローカルコンピュータに保存されているセッションIDがサーバに接続されたすべてのタブを閉じた後に即座に消去される場合、わかりません – lyborko

+0

ウィンドウを閉じるとセッションが破棄されます。複数のタブがあり、そのうちのいくつかだけが閉じられている場合、自動的にセッションが破棄されることはありません。 –

0

1分ごとにサーバーを呼び出すkeep_live ajax関数を試すと、データベースのlast_checkin変数などを更新できます。タブが閉じている場合、その関数はもはや呼び出されません。

すべての要求の始めに、last_checkinが最後の分(+接続のためにある時間)内にあるかどうかをチェックします。そうでない場合は、ログアウトするようにリダイレクトします(存在する場合はセッションを破棄します)。

これは、セッションタイムアウトに似ています。これは5秒ごとに行うことができます。誰かが自分のタブを閉じて(何らかの奇妙な理由で)他の人がPCに座って、以前に閉じたタブを開くと、ほとんどの場合、最後のチェックインからx時間が経過し、ユーザーはログアウトします。

ダウンサイドはユーザーとサーバーの間のトラフィックですが、大きな問題ではありません。これは、とにかくチャットの更新をチェックする方法で、多くのサービスで行われます。

+0

はい、私もこれを考えていました。私はAJAXリクエストを持っています。これは常にサーバーに送信されるため、ユーザーはまだオンラインであることがわかります。しかし、これは「理想的な」解決策ではありません。すでに述べたように、短い時間間隔でサイトに再入力することができるからです。 @Kinshuk Lahiriが正しければ、おそらく私の痛みが治癒されるでしょう。 – lyborko

関連する問題