サイトのログインとログアウト時に、自分のデータベースにユーザーアクティビティを記録しようとしています。これはうまくいきますが、タブやブラウザからページを閉じると、ログアウトクエリを実行する方法がないため、ユーザーはレコードを使用してサイトからログアウトしません。セッションの破棄またはgarabgeコレクションの前に関数を呼び出すPHP
方法1: 私はonbeforeunload
を試してみましたが、これはページが閉じる前にトリガしていないようです。
方法2: 私はPHPに送信されたAJAXキープアライブ・トークンを使用する方法をしようとするだろうが、これは1分ごとに実行する必要があるだろうと高トラフィック負荷を引き起こす可能性があります。
方法3: 私はalterantiveが1分を設定し、破壊するセッションコールバックを経由してログアウトクエリへの呼び出しを追加することです期待していました。
これはどれが最良の方法でしょうか、これを達成するより良い方法はありますか?
phpのセッションまたはphpガベージコレクションが行われる前にカスタム関数(クエリ)をトリガする方法はありますか?
UPDATE
みんなのアドバイスを取り、 '方法1' を試みることにしました。今のところ、これは私の試みが、そのまだ完全に機能していないです:
var isClosePage = true;
//detect f5 and backspace page navigation
$(document).on('keypress', function(e)
{
if (e.keyCode == 116)
{
alert('f5');
isClosePage = false;
}
if (e.keyCode == 8)
{
alert('backspace');
isClosePage = false;
}
});
//detect back and forward buttons
$(window).bind('statechange',function()
{
alert('back');
isClosePage = false;
});
//detect page button press
$('html').on('mouseenter', function()
{
console.log('mouse has enetered!');
isClosePage = false;
});
//detect browser buttons press
$('html').on('mouseleave', function()
{
console.log('mouse has left!');
isClosePage = true;
});
//make ajax call (logout) to server if above events not triggered
$(window).on('beforeunload', function(e)
{
if(isClosePage)
{
$.ajax(
{
url:'php/function/active-user.php?logout=ajax',
dataType: 'jsonp',
crossDomain: true,
async: false
});
//return 'some default message';
}
else
{
isClosePage = true;
}
});
誰もが、私はよくこの作業を行うことができますどのようにどんなも改善を提案することはできますか?
Orginally役立ちますこれは大変だった。私はあなたの最初の例を試して、内部にアラートを追加しましたが、同じ結果を得ています(ページはアラートポップアップなしで閉じます)。このアラートは、ブラウザタブでページが閉じられる前にポップアップする必要がありますか? – Orbitall
私が知っている限り、ページがアンロードされたときに 'alert()'を呼び出すことはできません。しかし、あなたのコードに 'event.returnValue'を設定することで警告ボックスを表示することは可能です。私は[jsfiddle](https://jsfiddle.net/u6kzwmov/1/)を作成しました。これを実証するあなたのために。 –
ええ、私はこのアンロードを使用してアンロードする前に(非常にハッキーです)、クローズされているページを検出しようと何度も試みました。ユーザーがブラウザを閉じたというメッセージをサーバーに送信する必要があるどのようにこれを行うにはどのような提案? – Orbitall