84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
有一张日志表,记录着每个用户的操作日志信息,例如登录或注销,每个操作都有对应的createtime,以及当前的userName
需求如下:
统计每个用户在一天内在线时长(登录到注销这段时间,可能一天登录注销多次)
如果用户电脑直接关机,或者非正常关闭系统,这时日志表不会产生注销日志,所以将用户最后一次的操作日志(可能是增删改查)作为注销时间,进行在线时长的计算
疑问:
我觉得在日志记录的时候需要记录每次会话的sessionId,否则无法进行上面计算?
闭关修行中......
セッションIDを記録する必要はありません。セッションIDを使用して異常終了の最終操作時間を記録しますか? 同じユーザーがログインした最後のデータはログアウト操作である必要があります1. 通常のログアウト、次のデータはログインである必要があります2. 通常の操作 (追加、削除、変更、確認) および異常なシャットダウンの後。 、次回はログイン操作になるはずです
したがって、ログイン時間の長さは現在のログイン時間、つまり次のログインまでの記録の時間になります
ただし、異常なシャットダウン後にユーザーがログインしない場合は、別途処理する必要があります。たとえば、20 分間操作がなかった場合、セッション ID は期限切れになります。最後のレコードが 20 分以上前であるかどうかを確認してください。 20分以上前の場合は異常終了とみなされます。
いずれにしても、どのユーザーの行動ログであるかを判断するにはユーザー識別が必要です
ログを書くとき、ログインとログアウトの時間差をログに書き込み、最後に合計しますか?
テーブルはこんなデザインも出来ます
ログインすると、ログイン時間がセッションに記録され、終了時間はログイン時間 + タイムアウト時間に設定されます。
ユーザーがアクティブな場合、セッションに記録されたログイン時間に基づいて、そのレコードの終了時間 (現在時間 + タイムアウト時間) が更新されます。
終了すると、セッションに記録されたログイン時刻に従って、そのレコードの終了時刻が現在時刻に更新されます。
元のテーブル(推定):
最終的に生成されたテーブル:
詳細なプロセス:
個人的には実装が難しいと思っています(ロジック処理にPHPが必要で、ページングも面倒です。取得したレコード数に応じてページングするのではなく、日付に応じてページングして表示する必要があります) limit 1 , 10 のように出力します。シングルページ SQL では最終的なテーブル構造を導出できないため、ここでのみ行うことができます....
limit 1 , 10
みんなに質問してもいいですか? ログインは記録できますが、ログアウトはどうやって記録するのでしょうか? ユーザーが実際にログアウト ボタンをクリックしない場合もあります。 Web の場合、ユーザーはブラウザを閉じてそのままにしておくことができます。ログアウトしたことをどうやって知ることができるでしょうか。セッション?
セッションIDを記録する必要はありません。セッションIDを使用して異常終了の最終操作時間を記録しますか?
同じユーザーがログインした最後のデータはログアウト操作である必要があります
1. 通常のログアウト、次のデータはログインである必要があります
2. 通常の操作 (追加、削除、変更、確認) および異常なシャットダウンの後。 、次回はログイン操作になるはずです
したがって、ログイン時間の長さは現在のログイン時間、つまり次のログインまでの記録の時間になります
ただし、異常なシャットダウン後にユーザーがログインしない場合は、別途処理する必要があります。たとえば、20 分間操作がなかった場合、セッション ID は期限切れになります。最後のレコードが 20 分以上前であるかどうかを確認してください。 20分以上前の場合は異常終了とみなされます。
いずれにしても、どのユーザーの行動ログであるかを判断するにはユーザー識別が必要です
ログを書くとき、ログインとログアウトの時間差をログに書き込み、最後に合計しますか?
テーブルはこんなデザインも出来ます
リーリーログインすると、ログイン時間がセッションに記録され、終了時間はログイン時間 + タイムアウト時間に設定されます。
ユーザーがアクティブな場合、セッションに記録されたログイン時間に基づいて、そのレコードの終了時間 (現在時間 + タイムアウト時間) が更新されます。
終了すると、セッションに記録されたログイン時刻に従って、そのレコードの終了時刻が現在時刻に更新されます。
元のテーブル(推定):
リーリー最終的に生成されたテーブル:
リーリー詳細なプロセス:
リーリー個人的には実装が難しいと思っています(ロジック処理にPHPが必要で、ページングも面倒です。取得したレコード数に応じてページングするのではなく、日付に応じてページングして表示する必要があります)
limit 1 , 10
のように出力します。シングルページ SQL では最終的なテーブル構造を導出できないため、ここでのみ行うことができます....みんなに質問してもいいですか? ログインは記録できますが、ログアウトはどうやって記録するのでしょうか? ユーザーが実際にログアウト ボタンをクリックしない場合もあります。 Web の場合、ユーザーはブラウザを閉じてそのままにしておくことができます。ログアウトしたことをどうやって知ることができるでしょうか。セッション?