2011-11-10 15 views
1

私はいくつかの既存のPHP/MySQLコードで作業しています。私は特定の活動をMySQLデータベースに記録/追跡しています。特定のアクセスポイントがログに記録されています。ユーザーがシステムにログインする回数がカウントされます。しかし、私はまた、ユーザーがWebサイトの特定のセクションにいる時間だけでなく、ユーザーがログインしている時間も記録する必要があります。ロギング活動:PHPアプリケーションを使用して時間を記録する方法は?

PHPはステートレスな環境であるため、ほとんどの場合、エンドポイントを記録する最良の方法は何ですか。ユーザーがログアウトしたとき

注:ブラウザを閉じるだけで済みますので、ユーザーに強制的にログアウトすることはできません。たぶん、分を数えるAJAXタイマーを置くことができますか?もしそうなら、異なる情報テーブル(MySQL)としてログインした活動や時間を扱うべきですか?

編集:私たちはjQueryを利用できると言いました。

答えて

1

あなたが言ったように、あなたはログアウトを強制することはできませんし、彼があなたのページを見ているのか、ピンボールをしているのかを確かめることはできません。

解決策は、ユーザーにアクティブであることをアプリケーションに伝えるために、例えば5分ごとにAJAXリクエストを送信することです。残念ながら、ユーザーが画面をロックしてピンボールをプレイすると、彼は自分が何をしているのか正確には分かりません。また、このような間隔でAJAXリクエストを行うと、特にマルチユーザ環境でサーバの負荷が増加します。

最高の解決策は、ユーザーのstart_time(ログイン時)を保存してから、彼がやるすべての操作とセッションタイムアウトでend_timeを更新することです。例えば、パー

  • 私は5時でログインします。 start_time5:00に更新してください。
  • 私はfoo.phpを5:01にブラウズします。 end_time5:01に更新してください。
  • 私はbar.phpを5:03にブラウズします。 end_time5:03に更新してください。
  • 私は5時05分にコーヒーのために行く。
  • 私は5:15に戻って来て、セッションが切れました。私は再ログインする必要があります。

最後に私がしたのは5:03(5:03 - 5:00 = 3)だったので、あなたのアプリケーションでは約3分かかっていました。もちろん、それが3分か5分かどうかを正確に知ることはできません。とにかく、ほとんどの場合、あなたのアプリケーションで何もしない(つまり、スクリプトを実行する、コールする、など)、私はそれを使用していないと仮定することができます。

ウィンドウの閉じるのようなJavaScriptイベントをキャプチャできれば、それはさらに優れているか、手動でサインアウトすると、それに応じてend_timeが更新されます。

1

2つのイベントをキャプチャする必要があります。

  1. ajaxのページとフックのonCLose()イベントは、ログシステムに戻ってコールバックされます。
  2. ログアウトボタンのonClick()イベントを保存ajaxハンドラにフックします。

onCloseイベントは、タブ/ broswerが閉じられ、onCLickイベントが明白であるときにキャプチャすることを可能にします。

これでブラウザが切れてマシンの電源が失われてしまうので、空きがあり、ログインイベントハンドラで訂正でき、最後のログインイベントにログアウトするだけの場合があります次回のログイン時にアウトされます。しかし、これはあなたがログインした時間を追跡する際に外れ値につながり、あなたのレポートの統計値を統計的に処理する必要があります。

1

最後のアクティビティを記録し、ajax経由で呼び出す追加のPHPスクリプトを使用できます。

ユーザーがまだアクティブである(移動、マウスまたは最後の5分などでキーを押す)かどうかを監視するためにJavaScriptを使用することができます

EDIT:あなたのJavaスクリプトは、AJAXを行う必要があります。ほとんどの重要な部分を忘れてしまいましたX秒を要請する。 x + tollerance秒の間にリクエストがなかった場合、セッションはデッドと見なすことができます。

関連する問題