Rumah  >  Soal Jawab  >  teks badan

java - 根据一张登录登出日志表计算每个用户在线时长,求个思路

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

阿神阿神2712 hari yang lalu1720

membalas semua(5)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-18 10:33:06

    Tidak perlu merakam sessionid Adakah anda mahu menggunakan sessionid untuk merekodkan masa operasi terakhir keluar tidak normal?
    Sekeping data terakhir yang dilog masuk oleh pengguna yang sama mestilah operasi log keluar
    1. Log keluar biasa, sekeping data seterusnya mestilah log masuk
    2 , ubah suai, semak), kali seterusnya mestilah sama Ini operasi log masuk

    Jadi panjang log masuk ialah masa log masuk semasa - masa rekod sebelumnya sebelum log masuk seterusnya

    Namun, jika pengguna tidak log masuk selepas penutupan tidak normal, ia perlu diproses secara berasingan Contohnya, jika sessionid tamat tempoh tanpa operasi selama 20 minit, semak sama ada rekod terakhir adalah lebih daripada 20 minit yang lalu lebih daripada 20 minit yang lalu, ia akan dianggap sebagai jalan keluar yang tidak normal.

    balas
    0
  • 黄舟

    黄舟2017-04-18 10:33:06

    Apa pun, mesti ada pengenalan pengguna untuk menentukan log tingkah laku pengguna itu,

    Apabila menulis log, tulis perbezaan masa antara setiap log masuk dan log keluar ke dalam log, dan tambahkannya pada penghujung?

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:33:06

    Meja boleh direka seperti ini

    用户id   登录时间  退出时间

    Apabila log masuk, masa log masuk direkodkan dalam sesi dan masa keluar ditetapkan sebagai: masa log masuk + masa tamat.

    Apabila pengguna aktif, berdasarkan masa log masuk yang direkodkan dalam sesi, masa keluar rekod itu dikemas kini: masa semasa + masa tamat masa.

    Apabila keluar, mengikut masa log masuk yang direkodkan dalam sesi, masa keluar rekod itu dikemas kini kepada: masa semasa.

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:33:06

    Jadual asal (diandaikan):

    record_id    uid    name      opr_type    c_time
    1            10     cxl       land        2016-12-26 08:00:00
    2            10     cxl       out         2016-12-26 23:00:00

    Jadual hasil akhir:

    用户名    日期(asc)    当天第一次登陆时间     当天最后一次登出时间     登陆时长(结果非准确值)
    cxl      2016-12-26    2016-12-26 08:00:00  2016-12-26 15:00:00   3小时10分
    cxl      2016-12-27    2016-12-26 08:30:00  2016-12-26 23:00:00   6小时10分

    Proses terperinci:

    1. 日期分组
    2. 当天第一次登陆时间
         2.1 第一种情况:若当天第一条记录操作类型是 登出,那么 当天第一次登陆时间 = 00:00:01
         2.2 第二种情况:若当天第一条记录操作类型是 登陆,那么 当天第一次登陆时间 = c_time
        
    3. 当天最后一次登出时间
        3.1 第一种情况:若当天最后一条记录操作类型是 登陆,那么 当天最后一次登出时间 = 23:59:59
        3.2 第二种情况:若当天最后一条记录操作类型是 登出,那么 当天最后一次登出时间 = c_time
    4. 登陆时长 
        4.1 当天最后一次登出时间 - 当天第一次登陆时间

    Beri saya beberapa idea Saya secara peribadi berpendapat ia tidak mudah untuk melaksanakannya (pemprosesan logik memerlukan PHP, dan paging juga menyusahkan. Ia perlu dipaparkan dalam paging mengikut tarikh, tetapi tidak mengikut bilangan rekod yang diambil. seperti limit 1 , 10 Untuk paging, SQL tunggal tidak boleh mendapatkan struktur jadual akhir), jadi kita hanya boleh pergi ke sini....

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:33:06

    Bolehkah saya bertanya kepada semua orang? Log masuk boleh dirakam, tetapi bagaimana untuk merekod keluar? Pengguna mungkin tidak mengklik butang log keluar. Jika ia adalah web, pengguna hanya boleh menutup penyemak imbas dan membiarkannya begitu sahaja. Bagaimana anda tahu apabila anda log keluar? sesi?

    balas
    0
  • Batalbalas