2012-02-10 10 views
3

可能性の重複:
How can I destroy sessions if user closes the browser window or navigates away from page in php?PHP Javascript?ユーザーがページまたはブラウザを閉じたときに何かを

は基本的に私は私のMySQL DBを更新することにより、私のユーザーに「オフライン」に設定すると、おそらく彼らのセッションときを終了します彼らはブラウザやページを閉じます。

私はこれを行うウェブサイトを見ました。

どのようにその完了し、例を投稿してください説明することができますか?

ありがとうございます。

答えて

0

window.onunloadを使用すると、ユーザーがページを離れるとき/タブを閉じるときにAJAX呼び出しを開始できます。

window.onunload = function(){ 
    // AJAX call to mark user "offline" 
} 

EDIT:ユーザーがページを離れたときに、これが唯一実行されるように、私は、リンクをクリックしたときに変数を設定することをお勧めします。 jQueryのを使用して

、それは次のように行うことができます。

$('a').click(function(){ // Run for all links 
    $('body').data('linkClicked', true); // Set global variable 
}); 

$(window).unload(function(){ // jQuery version of window.onunload 
    if(!$('body').data('linkClicked')){ // Check global variable 
     $.ajax({ 
     url: 'url', 
     data: {some: data}, 
     async: false // this locks the browser, but it may be needed to make 
        // sure the ajax call runs before the tab is closed 
     }); 
    } 
}); 
+0

これはうまく動作しますが、これはページ変更時にも発生すると思います。ユーザーがあなたのサイトの別のセクションへのリンクをクリックすると、これは解雇されます。 – Henesnarfel

+0

すべてのページが変更された後、このトリガはありませんか? –

+0

@SamDzHamidaかなり確信しています – Henesnarfel

0

上述したように、私は...このタスクを実行するには、このとwindow.onunloadを使用してのようなものをjQueryのを使用します。

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 
2

ページが閉じられたりナビゲートされたときに何かできることは、Rocketが示唆するように、イベントハンドラをアンロードイベントにアタッチすることだけです。しかし、多くのことがそれを妨げる可能性があるので、このイベントをトリガーにするべきではありません。ブラウザは他のタスクにリソースを集中させるためにブラウザを停止させることができ、ユーザは接続を切断したり、ブラウザが終了したりする可能性があります。

ユーザとセッションを追跡する最も信頼性の高い方法は、指定された間隔でサーバーにkeepAliveメッセージを送信します。その後、ユーザーは、指定されたタイムスタンプとk​​eepAliveメッセージの間隔の間にあることがあることがわかります。

サーバーでは、しばらくの間生きていないセッションをトラバースし、必要な操作を実行できます。

ただし、クールな「ログオフ」効果を作成するだけでよい場合は、この方法は必要ありません。

関連する問題