用户非法退出问题非常之急求各位高手指教

时间:2022-09-29 23:45:58
    需求:一个登陆页面,用户如果已经登陆,那么,别人再打开浏览器登陆同一个用户账号,会出现用户已登陆!
         在用户表的字段里,有个字段是保存用户登陆状态的!
        可是如果用户非法退出,如突然停电了,关机了,或者用户直接关闭浏览器了!
       数据库里的字段却没改变!当然我想过在Listener里,当Session失效时,改变那个字段!可是如果用户关了浏览器,再次陆登,此时数据库里那个字段还没有改变,而这个用户无法登陆了,只能等session失效后,将数据库里的登陆状态改变,才能再次登陆!
     求各位大虾指教,我J2EE不是很好,有些可能不懂,有代码例题更好!
     小弟在此先谢过了,在些奉上一百分!!!!!

8 个解决方案

#1


你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRequest的实例
User user....//是你的用户对象

session.setAttribute("LOGGED_USER",user);

2)在你需要判断的地方添加代码:

User user = null;
HttpSession session = request.getSession();
Object obj = session.getAttribute("LOGGED_USER");
if(obj == null){
  // 没登录
}
else{
  //已登录
  user = (User)obj; //取出用户信息

}

#2


引用 1 楼 huangchenliang 的回复:
你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRequest的实例
User user....//是你的……

那如果我登录了,别人也想用我的帐号密码登录,让他无法登录!怎么实现啊?

#3


引用 2 楼 baillluu 的回复:
引用 1 楼 huangchenliang 的回复:
你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRe……

  你这是要实现单点登录。。。

#4


建议你搜下单点登录的资料看下。。。

#5


HTTP 是stateless 的协议,
所以你想通过HTTP协议,实时知道Client是否断线,理论上不可能。

但是你可以使用AJAX做到比较接近的效果,
可以令Client以很小的时间间隔不断向Server发HTTP请求。
这样一旦client离线,server很快就可以获悉。

#6


谢了,大概明白了,昨天也到网上看了一下,就是一个单点登陆,比较麻烦!
    先不搞这个,csdn都没有实现单点登陆,我合必较劲,再说我又不是高手!呵呵

#7


用户非法退出问题非常之急求各位高手指教

#8


引用 7 楼 softroad 的回复:

真是对不住啊,刚结贴,你就回复了!

#1


你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRequest的实例
User user....//是你的用户对象

session.setAttribute("LOGGED_USER",user);

2)在你需要判断的地方添加代码:

User user = null;
HttpSession session = request.getSession();
Object obj = session.getAttribute("LOGGED_USER");
if(obj == null){
  // 没登录
}
else{
  //已登录
  user = (User)obj; //取出用户信息

}

#2


引用 1 楼 huangchenliang 的回复:
你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRequest的实例
User user....//是你的……

那如果我登录了,别人也想用我的帐号密码登录,让他无法登录!怎么实现啊?

#3


引用 2 楼 baillluu 的回复:
引用 1 楼 huangchenliang 的回复:
你为什么要搞个数据库字段来标识用户是否已登录。这样肯定是不合理吧。

就用session就可以实现啦。

1)在登录入口(应该是唯一的入口),用户成功登录后,创建一个Session并将用户信息存入:
HttpSession session = request.getSession(); //request是HttpServletRe……

  你这是要实现单点登录。。。

#4


建议你搜下单点登录的资料看下。。。

#5


HTTP 是stateless 的协议,
所以你想通过HTTP协议,实时知道Client是否断线,理论上不可能。

但是你可以使用AJAX做到比较接近的效果,
可以令Client以很小的时间间隔不断向Server发HTTP请求。
这样一旦client离线,server很快就可以获悉。

#6


谢了,大概明白了,昨天也到网上看了一下,就是一个单点登陆,比较麻烦!
    先不搞这个,csdn都没有实现单点登陆,我合必较劲,再说我又不是高手!呵呵

#7


用户非法退出问题非常之急求各位高手指教

#8


引用 7 楼 softroad 的回复:

真是对不住啊,刚结贴,你就回复了!