java - 根据一张登录登出日志表计算每个用户在线时长,求个思路
阿神
阿神 2017-04-18 10:31:06
0
5
1716

有一张日志表,记录着每个用户的操作日志信息,例如登录或注销,每个操作都有对应的createtime,以及当前的userName

  • 需求如下:

    • 统计每个用户在一天内在线时长(登录到注销这段时间,可能一天登录注销多次)

    • 如果用户电脑直接关机,或者非正常关闭系统,这时日志表不会产生注销日志,所以将用户最后一次的操作日志(可能是增删改查)作为注销时间,进行在线时长的计算

  • 疑问:

    • 我觉得在日志记录的时候需要记录每次会话的sessionId,否则无法进行上面计算?

阿神
阿神

闭关修行中......

全員に返信(5)
Peter_Zhu

セッションIDを記録する必要はありません。セッションIDを使用して異常終了の最終操作時間を記録しますか?
同じユーザーがログインした最後のデータはログアウト操作である必要があります
1. 通常のログアウト、次のデータはログインである必要があります
2. 通常の操作 (追加、削除、変更、確認) および異常なシャットダウンの後。 、次回はログイン操作になるはずです

したがって、ログイン時間の長さは現在のログイン時間、つまり次のログインまでの記録の時間になります

ただし、異常なシャットダウン後にユーザーがログインしない場合は、別途処理する必要があります。たとえば、20 分間操作がなかった場合、セッション ID は期限切れになります。最後のレコードが 20 分以上前であるかどうかを確認してください。 20分以上前の場合は異常終了とみなされます。

いいねを押す +0
黄舟

いずれにしても、どのユーザーの行動ログであるかを判断するにはユーザー識別が必要です

ログを書くとき、ログインとログアウトの時間差をログに書き込み、最後に合計しますか?

いいねを押す +0
Ty80

テーブルはこんなデザインも出来ます

リーリー

ログインすると、ログイン時間がセッションに記録され、終了時間はログイン時間 + タイムアウト時間に設定されます。

ユーザーがアクティブな場合、セッションに記録されたログイン時間に基づいて、そのレコードの終了時間 (現在時間 + タイムアウト時間) が更新されます。

終了すると、セッションに記録されたログイン時刻に従って、そのレコードの終了時刻が現在時刻に更新されます。

いいねを押す +0
巴扎黑

元のテーブル(推定):

リーリー

最終的に生成されたテーブル:

リーリー

詳細なプロセス:

リーリー

個人的には実装が難しいと思っています(ロジック処理にPHPが必要で、ページングも面倒です。取得したレコード数に応じてページングするのではなく、日付に応じてページングして表示する必要があります) limit 1 , 10 のように出力します。シングルページ SQL では最終的なテーブル構造を導出できないため、ここでのみ行うことができます....

いいねを押す +0
洪涛

みんなに質問してもいいですか? ログインは記録できますが、ログアウトはどうやって記録するのでしょうか? ユーザーが実際にログアウト ボタンをクリックしない場合もあります。 Web の場合、ユーザーはブラウザを閉じてそのままにしておくことができます。ログアウトしたことをどうやって知ることができるでしょうか。セッション?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!