系统登录、登出保存日志问题

最近有个需求,系统登录进来保存用户 登录日志的信息,有做过的请指教一下。。

8个回答

[quote]现在要这样实现了,登录进来记录用户信息,当用户退出时 就修改记录的用户信息,我感觉这不大合理呀。要修改,我根据什么修改呀。[/quote]

只是说记录用户的登陆状态,没必要修改用户信息啊,你再重建一张用户状态表,每个用户一个状态,用户登陆退出的时候,只修改对应的状态信息,只不过多加了一个update操作而已。

给你一个简单的例子,这样好下手:

JBuilder2005实战JSP之日志和部署.用户登录和退出日志
[url]http://www.uml.org.cn/j2ee/200601135.htm[/url]

这个就是设计一个数据库表在用户登录时把它的登录时间,ip地址,用户名等等记录到数据库中。用户登录成功后将用户的登录信息写到数据库中。做的高级点的erp软件还能把用户做了哪些操作记录下来。
大致思路:
1.根据日志设计数据库表
2.登录成功,把登录信息写到表中。
3.用户推出或者注销把用户的注销,退出信息写到表中。

如果想做一个单点登录系统,登录时检测用户是否是活跃状态,是的不让登录,那这个就是单点登录了(SSO)
关于SSO可以参考参考:
url:http://www.cnblogs.com/luiweiping002/archive/2009/10/26/1649266.html

使用aspectJ 的aop嘛。。。
很简单

  当用户登录系统时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。

  我们利用HttpSessionBindingListener接口来完成记录登录和退出日志的功能,该接口中定义了两个方法:

  ·valueBound(HttpSessionBindingEvent event)

  ·valueUnbound(HttpSessionBindingEvent event)

  如果一个类实现了HttpSessionBindingListener接口,当对象通过session.setAttribute()被绑定到Session中时,则对象的接口方法valueBound()被自动调用,当对象从session中移出时(通过调用session.invalidate()、session.removeAttribute()或session自动过期时),valueUnbound()方法将被自动调用。

  下面我们使User.java类实现HttpSessionBindingListener接口,调整后的代码如下所示:
[code="java"]
package bookstore;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionBindingEvent;
import java.sql.*;
import java.text.SimpleDate表单at;
import java.util.Date;

public class User implements HttpSessionBindingListener
{
 …
 private String loginDatetime;//用户登录时间
 …
 public void valueBound(HttpSessionBindingEvent event)
 {
  Connection conn = null;
  String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
      " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
  try
  {
   conn = DBConnection.getConnection();
   PreparedStatement pStat = conn.prepareStatement(sqlStr);
   loginDatetime = getCurrDatetimeStr(); //当前时间串
   pStat.setString(1, userId);
   pStat.setString(2, loginDatetime);
   pStat.executeUpdate();

  } catch (SQLException e)
  {
   throw new RuntimeException(
    "用户登陆日志写入出错");
  } finally
 {
 try
 {
  if (conn != null)
  {
   conn.close();
  }
 } catch (SQLException ex)
 {
  ex.printStackTrace();
 }
 }
}

public void valueUnbound(HttpSessionBindingEvent event)
{
 Connection conn = null;
 String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
     " where USER_ID=? and DT_LOGIN = ?";
 try
 {
  conn = DBConnection.getConnection();
  PreparedStatement pStat = conn.prepareStatement(sqlStr);
  pStat.setString(1, getCurrDatetimeStr());
  pStat.setString(2, userId);
  pStat.setString(3, loginDatetime);
  pStat.executeUpdate();

 } catch (SQLException e)
 {
  throw new RuntimeException(
   "用户退出日志写入出错");
 } finally
 {
  try
  {
   if (conn != null)
   {
    conn.close();
   }
  } catch (SQLException ex)
  {
   ex.printStackTrace();
  }
 }
}

//获取当前时间字串,以yyyyMMddHHmmss格式返回,如20050505010101
private static String getCurrDatetimeStr()
{
 SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss");
 return sdf.表单at(new Date());
}
}
[/code]

  valueBound()方法向T_LOGIN_LOG表插入一条登录日志,在valueUnbound()方法中更新日志表的退出时间,此外第80~84行提供了一个获取当前时间串的方法getCurrDatetimeStr(),通过该方法获取登录和退出时间点的时间字符串。

  下面通过描述用户登录系统直到退出时所经历的步骤说明程序如何记录用户的登录和退出时间的:

  1.用户通过login.jsp输入密码登录后,程序转向switch.jsp控制页面。

  2.在switch.jsp中,我们通过session.setAttribute("ses_userBean", userBean)方法将User.java类的对象userBean绑定到session中。

  3.此时userBean对象的HttpSessionBindingListener接口方法valueBound()被调用,向T_LOGIN_LOG表插入一条登录日志。

  4.switch.jsp转向welcome.jsp页面。

  5.用户点击welcome.jsp页面中的链接退出系统时,转向quit.jsp页面。

  6.quit.jsp调用session.invalidate()方法,userBean对象从session中清除。

  7.此时userBean对象的HttpSessionBindingListener接口方法valueUnbound()方法被调用,更新日志的退出时间,关闭浏览器窗口。

  HttpSessionBindingListener接口是Web容器的事件接口,实现接口的类在某个事件发生时自动被调用,Web容器有多个这样的事件接口,它们分别是:

  ·ServletContextListener 接口:Web容器启动和销毁的事件处理接口,接口中定义了两个方法。

  ·ServletContextAttributeListener接口:Web上下文属性发生更改时的事件处理接口。

  ·HttpSessionListener接口:Session创建和销毁事件的事件处理接口。

  ·HttpSessionAttributeListener接口:Session会话中属性对象更改的事件处理接口,该接口和我们在前面使用的HttpSessionBindingListener接口相似。

  此外在J2EE1.4中还提供了另外两个事件处理接口,它们是:

  ·ServletRequestListener接口:Request请求对象创建和销毁事件处理接口。

  ·ServletRequestAttributeListener接口:更改Request中属性对象时的事件处理接口。

这个问题我觉得嘛,重要的不是 代码 重要的是思路。登录时 你要记录什么信息,你需要设计成什么样的表结构,那些信息是你关注的很重要。这些弄清了。好的系统是设计出来的,编码只是其中的一个重要的环节。很多人只注重,有现成的代码吗?很多答题人又很有意思,其实自己也没有那些经验 上网随便搜一个 粘切上 这样不好。没有帮助!
三点很重要:
1.我需要实现那些需求,功能是什么,我关注那些信息
2.我想把它设计成什么样的比较合理,设计。
3.先实现一下,看看行不行,不行在改进。敏捷开发。

在实现过程中遇到了某些技术小问题,再各个击破。不就OK了吗!

wge83
wge83 顶,回答很好!
大约 7 年之前 回复

[code="java"]
现在我们项目中的日志实体类有这么几个属性:操作名称、操作人、操作状态、退出状态、操作时间、退出时间,当用户登录时,就新增一条信息,记录登录人,登录时间,状态,退出时就将新增的那条记录。请问这样行的通吗?帮忙指点一下。谢谢。补充一下,系统没有单点登录,也没有用spring的aop,就是简单的记录用户登录、登出信息。
[/code]

才看到了你的回复 不好意思。

没有单点登录你这个就比较简单。你的字段中需要记录一下登录IP这样把用户登录IP记录下来比较好。其他基本信息都有了。做起来还是比较简单。仔细考虑一下你的实际情况。把表结构设计合理后。再去设计记录信息的接口和方法。

[quote]如果用 HttpSessionBindingListener 实现的话,那我的user类必须实现这个接口???我们项目现在采用的是struts2 sping hibernate,如果我的user类实现HttpSessionBindingListener 接口,就得在user类中重写那两个方法,而且得用jdbc 保存的日志表中?我想在action这一层 中加入日志,如何实现?[/quote]

最主要的还是session销毁时(可能有N中情况诱发,如正常退出、关闭浏览器等),如何触发写日志的操作。

登陆时,日志可以随着用户名/密码的验证通过而写入。
退出时,如何利用session销毁事件写日志,这是一个难点,不实现HttpSessionBindingListener接口的话,就不好触发session销毁,如果自己写代码判断的话,可以在后台开一个扫描器,每个很短的一段时间判断一下session的状态,这样写起来麻烦,而且写不好的话,也耗费容器性能。

建议实现一下这个接口,反正接口是可以实现多个的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
保存登录日志
本课程主要结合MVC概念开发一个CRM管理系统,在本课程中将综合使用Java、HTML、CSS、JavaScript、JSP、Servlet、MVC、EL、JSTL等概念,并且结合反射编程的方式,使用自己的开发框架进行项目的编写。官方QQ群:612148723。
ssh2-aop这是一个用来做登录、登出日志的系统
ssh2-aop这是一个用来做登录、登出日志的系统
用户登陆登出日志
最近有点忙,人物比较多,累。。 ======================================= 项目需求要支持查看用户操作记录和登录的记录 操作记录已经有了 现在只需要添加登录的记录 线面只说实现登录记录的方法 和 一些问题 项目用的springMvc  hibernate  记录登录登出用的是实现HttpSessionBindingListener接口(这里有详细介绍
web的登录与登出功能
登录界面package com.sys.ctrl;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframewor
后台登录登出
后台登录登出 一.Session简介 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。 二.Session与Cookie...
linux 系统登录日志
用来记录 系统在什么时候由哪个程序做了什么样的行为,发生了什么样的事情等.可以用来解决以下问题: 解决系统方面的错误 解决网络服务的问题 历史事件记录 常见系统登录日志 /var/log/cron 计划任务 /var/log/dmesg 开机信息 /var/log/lastlog 记录系统上面所有的账号最近一次登入系统时的相关信息 /var/log/maillog 或 /var/log/mail
Django 登录/登出 模块
Django 登录 登出
shiro实现登录和登出
shiro实现登录与登出
07登录登出
superuser 创建管理员账号:python manage.py createsuperuser,然后填用户名,手机号,密码 前端代码 base.html {% load static %} <!DOCTYPE html> <html> <head> <meta charset="utf-8"> {% block meta %}{%...
jsp登录和登出实现
该作品主要是实现网站的登录与登出实现,可以看到当用户登录过后才能实现相应的功能
登录登出,自动登录
UserLoggingDao: public interface UserLoggingDao { // 根据账号获取用户信息 User findByAccount(String account); } UserLoggingDaoImpl: public class UserLoggingDaoImpl implements UserLoggingDao{ @Override...
Shiro源码研究之登录与登出
接前文,在拿到Subject实例之后,我们经常调用的就是其login和logout方法了。本文就让我们好好看看这两个方法,让心理有个谱。 再次强调,本人阅读的Shiro版本为1.3.2。 1. 前言 我们拿到的Subject实例,在web环境下的其实际类型是WebDelegatingSubject。而WebDelegatingSubject的基类正是DelegatingS...
记录系统的用户的登录日志(登录时间,登出时间,用户信息等)
系统架构:sshrn服务器:weblogicrn用户会通过一个链接访问程序的一个action,进入到系统界面。现在要监控登陆这个页面的用户(登录时间,登出时间,用户信息等)。我目前的做法是在这个action中把用户的登录时间,用户信息存到数据库的online表中,将online表的主键放在session中。当用户关闭浏览器或者是通过系统的退出按钮之后,通过onunload监控使用ajax,执行一个action,在session中取的online表额主键,更新online表,插入登出时间。rn在统计端,我需要统计8:00-20:00每个整点的在线人数大概如图这个样子的。每个整点的在线人数判断方法是,在整点这个时刻之前登陆,在整点这个时刻之后登出或者还没有登出的,就认为改用户在这个整点时是在线的。rn[img=https://img-bbs.csdn.net/upload/201311/13/1384340767_418244.png][/img]rn但是目前存在的问题:rn1,用户如果刷新界面,就会认为第一次登陆已经结束,然后又重新在数据库里面插入了一条数据。因为,刷新页面,又一次的执行了进入系统的action。rn2,如果服务器端发生故障,或者其他原因,导致ajax的action没有执行或者执行不陈宫,那这个用户的登出时间就一直未空,那统计的时候,该用户就一直在线了。求解决方案。rn有朋友说用心跳神马的,如果有懂的朋友,劳烦说的具体一点,对这个心跳真的是知之甚少啊?具体这个心跳要怎么配置神马之类的。^_^
基于SSH2框架AspectJ的登录登出日志实现
前段时间帮朋友搞了个小项目,也是在网上参考了别人博客后自己运用AspectJ AOP切面实现登录登出日志的功能。今天拿出来和大家分享下。 AOP切面是一个非常不错的特性,为我们带来了一种新的编程方式,对代码的无侵入性是它最大的特点。平时我们用到的Struts2拦截器就是AOP的一个典型运用。从Spring的低版本开始就能够实现切面功能,但是非常麻烦,不过当Spring升级到2.0之后,这一...
从linux登录和登出mysql
首先最常用的mysql登录命令行为: [code="sql"] babyduncan@ubuntu:~$ mysql -h localhost -p -u root [/code] 如果不是登录远程的数据库的话,-h是可以省略的: [code="sql"] babyduncan@ubuntu:~$ mysql -p -u root [/code]、 -u后面接用户名,-p是密码的意...
JAAS登录后如何登出?
在Web程序中使用了Jaas做验证,rn可是模式找不到什么方式退出...rnLoginModule 这个SPI中是有logout()这个方法,rn不过怎么样才能用上呢?rnrn
如何记录系统的登录日志
我是一个新手,现在遇到一个问题,希望各位高手帮我解决!!!rnrn一个系统,每次登录时都要输入用户名和密码,但为了便于管理,便用一张表来专门记录系统的登录日志信息,比如用户、密码、登录时间、状态等。但是我不知道具体的实现方法!(我用的是informix数据库,我想这个与是什么样的数据库应该没有关系吧)如何将每次的信息记录到数据库表中!!!
linux 系统mysql 登录日志
请问linux环境下mysql有没有记录非法登录的日志。
JSP开发的登录登出(Web)
JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出
SpringBoot实现登录登出,登录态管理
账户模块中必要的功能登录登出,相信这个大家都经常使用了。简单介绍下在SpringBoot中的实现 先说下实现思路: 用户名密码存储在数据库中,前端发出请求,拦截器先检测用户有无登录,若有登录可直接请求接口。无需登录就可请求的接口需要加@NoLogin自定义注解。若未登录,前端跳转到登录页面,调用登录接口,系统在后台验证用户名密码,验证通过将用户信息存储在redis中和线程上下文中。 一、设计...
登录登出搜集的网站资源
搜集整理的登录/注册/退出资料,现在分享给大家,希望对大家有帮助^_^
东北大学校园网登录登出shell脚本
东北大学mac,linux校园网登录注销脚本
登录/登出 跳转当前页面
之前也遇到这个问题,在不同的页面都可以登录和登出,怎样登录的时候跳转回当前的页面呢? 今天做项目又遇到这个问题,决心不能再拖下去,毕竟要解决掉。 用django的话,我上网搜了一下解决方法,搜到一篇可以用的,不管怎么说都是一个好的回答,我就照着这个实施了一遍,发现可以使用。 下面贴下这个的链接: http://stackoverflow.com/questions/806835/djang
django 实现登录登出的功能
django登录,django是一个python下的大型框架,之所以大,是因为很多东西都可以延用。试了一下继承django自带的user类实现登录。
登录登出流程要点总结
1、Form表单 <form id="loginForm"> <ul> <li> <div class="signin_flex_div"> <img src="assets/img/man_icon.png" /> <input type=&
ssm+shiro+maven+bootstrap实现登录登出功能
基于ssm+maven+shiro+bootstrap的架构实现用户登录登出
关于登录登出记录数据的问题~~~急
我做一个登录验证的程序,要求是一个账号在登录期间不可以有其他人登录,我使用的是在数据库中创建一个字段,当点击登录后,该字段为1,当点击退出按钮登出后,该字段为0,在登录时,判断该字段如果为1则不允许登录。但是我没有办法捕捉到用户直接关闭浏览器、结束浏览器进程或者用户机器死机的情况。rnrn百度上有人说使用onunload或者onbeforeunload事件来捕捉关闭浏览器,但是这种方法在刷新时也会触发,有找到了这种方法的增强版,即防止刷新的,但是对于多标签的浏览器或者基于IE内核的其他浏览器(除IE)都不能很好的实现,而且使用特殊方法关闭浏览器也有问题。所以这种方法基本PASS了rnrn百度上还有人说使用session或者application记录信息,但是这两个方法在关闭浏览器的时候也不能立即出发,也得等待周期到了以后才能实现。rnrn我无奈了~~~特来此请教各位大神~~能够赐予我一个可行的办法~~~我该怎么办啊
Web应用初体验——登录登出验证系统
Web应用初体验——登录登出验证系统本系统所用技术包括:jade模板(加强的html),bootstrap(css样式集),express(Web应用框架),js,nodejs,mysql,token验证等。 源码地址: https://github.com/qingywen/DEMO/tree/master/Greeni 原文链接:https://qingywen.github.io/2017
实现用户注册与登录、登出(二)
实现用户注册与登录、登出(一)
Unix系统登录日志问题
请教各位高手,在Unix环境下,怎么通过系统提供的函数读取本系统的相关登录日志信息?rn如现在的情况:rn通过调用last -W /etc/wtmpx命令获得相关的各用户登录信息;rnUser Line Device PID Hostname Login time Elapsed Timern Commentsrndxpt ftp ftp1791 1791 yangmeiMon Jun 13 13:53 00:00rn ??rndxpt ftp ftp1788 1788 yangmeiMon Jun 13 13:52 00:00rn ??rndxpt ftp ftp1785 1785 yangmeiMon Jun 13 13:51 00:00rn ??rndxpt ftp ftp1782 1782 yangmeiMon Jun 13 13:50 00:00rn ??rndxpt ftp ftp1779 1779 yangmeiMon Jun 13 13:49 00:00rn ??rndxpt ftp ftp1776 1776 yangmeiMon Jun 13 13:48 00:00rn ??rndxpt ftp ftp1773 1773 yangmeiMon Jun 13 13:47 00:00rn ??rndxpt ftp ftp1770 1770 yangmeiMon Jun 13 13:46 00:00rn ??rndxpt ftp ftp1767 1767 yangmeiMon Jun 13 13:45 00:00rn ??rn虽然可以通过对上述的信息进行处理可获得相关的登录信息,但有没有现成的系统函数能直接操作wtmpx文件呢?rn恳请各路高手指教!rn我现在找到了一个函数getutent,但读取的信息不是上述信息;rn请各路高手帮忙!
保存日志的问题!
struts架构下准备写在action里(当然架构可以不管写在页面也可以),想做一个日志保存,请教怎么在本地而非服务器打开一个FileDialog保存对话框,写入数据?谢谢!
保存登录用户信息的问题.
我想在系统登录时,把用户人登录信息通过session保存到一个变量里面去.rn这样我在很多地方要用到当前用户信息的时候就可以直接取到数据.rnrn但有个问题就是这个变量只能保存最后一个用户登录的信息,不能保存多个用户的信息,不知道这个问题你们是怎么解决的?
python 实现一个可以注册、登录、登出的系统
设计一个拥有注册、登录、退出功能的小程序。 一、接口提供方 (1)使用面向对象思想,将方法封装到某个类中。 (2)创建一个独立的包、模块存放这个类。 (3)提供注册功能:需要输入“手机号码”、“密码”、“确认密码”三个信息。注册完成后提示注册的手机号码。限制手机号码长度11位,不满足则抛出异常给调用方;密码、确认密码长度为6位,不符合则抛出异常给调用方;密码、确认密码不相同,也抛出异常给调用方。 (4)注册信息保存到本地一个文件中。 (5)提供登录功能:登录成功后,提示欢迎登录;账号不存在时、账号或者密码不正确时,抛出异常。 (6)提供退出功能:需要输入用户名,打印xxx退出登录。 (7)自定义多个异常类并继承Exception。以满足上面的不同情况。 二、接口调用方: 调用方是程序入口,它是独立的python文件。主要功能为: (1)显示欢迎提示:程序运行起来,打印欢迎信息,并打印功能菜单,并提示用户进行的输入选择。输入1执行注册、输入2执行登录、输入3执行退出登录、其他无效输入。 (2)主程序一直在循环运行,等待用户输入。
登录日志
本课程主要目的是讲解Java SE与Java EE的基础整合,在JavaScript基础上讲解Java WEB开发之中所使用到的各个知识,包括Scriptlet、Page指令、Include指令、Forward指令、JavaBean技术、Servlet、MVC设计模式、表达式语言、JSTL标签库、后又深入讲解了反射在框架开发之中的使用方式,为日后的框架开发课程打下基础。官方QQ群:612148723。
保存日志
使用AS的同学都知道,在我们调试app出现bug时,错误日志会一闪而过,想知道是那个地方出的错都看不到,错误日志自动被清除了。原因很简单,当前AS所调试app被退出了手机桌面,会自动清理日志。 那我们怎么实时地将日志保存起来呢?这里给我两个解决方案:(参考自:https://my.oschina.net/nmjkl/blog/82175,自己动手加工下) 方案1 以下是我的sdk路径,请自己
日志得保存
在程序运行中,如何自动保存日志
登出
这个项目前面的章节简单介绍了idea的使用,vue的入门,Spring Boot的应用开发入门。nnn后面开发了一个通用的后台管理系统。技术上使用Spring Boot框架整合ssm,数据库使用MySQL,使用整合了druid数据库连接池。使用了quartz开发自定义定时任务。使用了AOP开发日志系统。使用shiro开发权限功能。使用BootStrap搭建前端页面,Vue做前端交互。
【急求解】linux Suse11 的用户登出日志
用户登录操作系统会在message里有日志rnrn但是我设置了会话超时时间,比如10分钟后用户自动登出,但是没看到message里有日志rnrn想知道linux类似如下情况在哪里可以看到日志rnrn1. 像最开始说的 用户登录后,不操作导致session超时自动登出的日志rn2. 用户设置了生命周期,不使用被系统自动锁定的日志rn3. 用户设置同时登录数限制,达到session限制,再有其他用户登录,此时登录失败是否记录的日志(需要包含登录失败原因)rn4. 设置session连接数,达到一定数量是否有日志记录,在哪rnrnExcess session Logs (Record of closed sessions due to excess connections).rnrn是否存在类似日志我没找到,有的话一个问题至少50分,其他办法给补分
请问关于日志保存当前登录人员的问题
对各种操作记录日志应该是很正常的功能。但是执行日志保存的位置可能是很深的地方,那么登录用户就要一步一步地都带进去么?请问各位有什么好的解决办法么?rnrn给100分,请思考一下再发表意见。
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池