Maison  >  Questions et réponses  >  le corps du texte

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

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

阿神阿神2763 Il y a quelques jours1753

répondre à tous(5)je répondrai

  • 天蓬老师

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

    Il n'est pas nécessaire d'enregistrer l'ID de session. Voulez-vous utiliser l'ID de session pour enregistrer l'heure de la dernière opération de sortie anormale ?
    La dernière donnée connectée par le même utilisateur doit être une opération de déconnexion
    1. Déconnexion normale, la donnée suivante doit être une connexion
    2. Fermeture anormale après une opération normale (ajouter, supprimer). , modifier, vérifier), la prochaine fois doit être la même C'est une opération de connexion

    Donc, la durée d'une connexion est l'heure de connexion actuelle - l'heure de l'enregistrement précédent avant la prochaine connexion

    Cependant, si l'utilisateur ne se connecte pas après un arrêt anormal, il doit être traité séparément. Par exemple, si l'ID de session expire sans opération pendant 20 minutes, vérifiez si le dernier enregistrement remonte à plus de 20 minutes. Il y a plus de 20 minutes, cela sera considéré comme une sortie anormale.

    répondre
    0
  • 黄舟

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

    Quoi qu'il en soit, il doit y avoir une identification de l'utilisateur pour déterminer de quel journal de comportement de l'utilisateur il s'agit,

    Lors de la rédaction du journal, écrivez le décalage horaire entre chaque connexion et déconnexion dans le journal et ajoutez-le à la fin ?

    répondre
    0
  • PHP中文网

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

    La table peut être conçue comme ça

    用户id   登录时间  退出时间

    Lors de la connexion, l'heure de connexion est enregistrée dans la session et l'heure de sortie est définie sur : heure de connexion + heure d'expiration.

    Lorsque l'utilisateur est actif, en fonction de l'heure de connexion enregistrée dans la session, l'heure de sortie de cet enregistrement est mise à jour : heure actuelle + heure d'expiration.

    Lors de la sortie, en fonction de l'heure de connexion enregistrée dans la session, l'heure de sortie de cet enregistrement est mise à jour à : l'heure actuelle.

    répondre
    0
  • 巴扎黑

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

    Tableau original (supposé) :

    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

    Tableau final généré :

    用户名    日期(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分

    Processus détaillé :

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

    Donnez-moi quelques idées. Personnellement, je pense que ce n'est pas facile à mettre en œuvre (le traitement logique nécessite PHP, et la pagination est également gênante. Il faut l'afficher en pagination en fonction de la date, mais pas en fonction du nombre d'enregistrements pris. comme limit 1 , 10 Pour la pagination, un seul SQL ne peut pas obtenir la structure de la table finale), nous ne pouvons donc aller qu'ici....

    répondre
    0
  • PHP中文网

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

    Puis-je poser une question à tout le monde ? La connexion peut être enregistrée, mais comment enregistrer la déconnexion ? L'utilisateur ne peut pas réellement cliquer sur le bouton de déconnexion. S'il s'agit du Web, l'utilisateur peut simplement fermer le navigateur et le laisser tranquille. Comment savoir quand vous vous êtes déconnecté ? session?

    répondre
    0
  • Annulerrépondre