0

ログイン、ログアウト、および継続時間をデータベースに保存したいと思います。

  • ログイン時間は、ユーザーが認証された (ログインに成功した) ときに作成されます。
  • ログアウト時間は、ユーザーがログアウト ボタンをクリックしたときに作成されます。
  • 期間は、ログアウト - ログイン時間です。(ログアウトマイナスログイン)

しかし問題は、ユーザーがログアウト ボタンをクリックしなかった場合はどうなるかということです。状況は次のとおりです。

  • インターネットの損失
  • ブラウザ/タブを閉じます。(これにはjavascriptを使用する必要がありますが、その方法はわかりません。アイデアはありますか?)

編集:

質問に何かを追加するのを忘れていました。プログラムは完全なフラッシュ プログラムであり、他のページへのナビゲーションはありません。1ページのみ

4

3 に答える 3

1

PHP のすべてのセッション/ログイン関数は通常、 Cookie ベースであることを覚えておくことが重要です。したがって、セッション Cookie の有効期間を変更すると、問題が解決するはずです。

http://us3.php.net/manual/en/function.session-set-cookie-params.php

また、Cookie のみを使用するように PHP セッションを設定することもできます。

http://us2.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies

繰り返しますが、ブラウザのウィンドウ/タブを閉じることはできますが...なぜですか? たとえば、あなたのサイトを複数のタブで開く場合があります。これらのタブの 1 つを閉じると、Web サイトから自動的にログアウトされますか? それは非常に悪い設計です。代わりに、セッションの有効期間を設定して、タブだけでなくブラウザーが閉じられた場合に有効期限が切れるようにします。(ポップアップやiframeを含む、サイトのウィンドウが閉じるwindow.unloadとログアウトすることにも注意してください。本当にそれが必要ですか?)

http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

セッション状態をデータベースに保存したい場合は、これらのガイドのいずれ 試してください。または、 session_set_save_handlerで独自のロールを作成します

于 2009-12-03T07:51:47.380 に答える
0

ブラウザ/タブのクローズに関しては、unloadイベント ( window.onunload、jQuery$(window).unload(fn)など) をバインドしてサーバーに通知できます。より一般的な解決策は、サーバーに定期的に (たとえば 5 分ごとに) ping を実行することですが、これはユーザーにとって迷惑になる可能性があるため、慎重に行ってください。

于 2009-12-03T06:33:32.883 に答える
0

ユーザーが単にブラウザを閉じたり、インターネットから姿を消したりした場合、ユーザーがログアウトするイベントの受信に依存することはできません。

この場合、ある種のセッション タイムアウトを設定し、アプリケーションがセッションが古すぎることに気付いたときにログアウトを記録する必要があります。

これが実際の要件である場合は、セッションのタイムアウトを監視する「cron」ジョブが必要だと思います。セッションがタイムアウトすると、ログオンしていた場合、そのユーザーの「ログアウト」イベントが記録されます。

(たとえば) ASPNET の Session_End イベントを使用できないことに注意してください。これは、どちらも確実に呼び出されないためです (たとえば、サーバー プロセスが再起動した場合)。

もう 1 つのオプションは、ユーザーが次回ログオンするときにログアウト時間を追加することです。ユーザーがログオンするときに、古いセッションをチェックし、最後にページがヒットしてから一定時間、閉じられていないセッションがあると想定します。

本当にできることはそれだけです。

于 2009-12-03T07:47:33.090 に答える