日期:2014-05-20  浏览次数:20772 次

求助,java网站用户登陆后持久在线的思路。
系统架构

 tomcat+struts2+spring

现在我是把sessionout 的时间设为4个小时。是可以满足我的需要了。

但我现在想,就是把tomcat重启以后用户也不会掉线,应该怎么样设置?

我自己的思路是

1:建立一个mysql表,表名online, 

字段 session 和 lastTime, username
session存储加密后的sessionID
lastTime存储用户最后动作的时间戳
username存储用户名


2:用户登陆成功后获取sessionID然后和一个固定的字符串连接在一起加密形成一个32位的字符串,然后插入online表
3:在最主要的页面,用户一访问这几个页面就更改对应的online表的lastTime值。
4:每隔15分钟执行一次计划任务,把lsatTime<now()-60*60*4 把4个小时内没有动作的用户踢掉
5: 在用户登陆页面,在用户登陆之前,检测online表有没有对应的数据,有对应的数据,则直接让用户进入管理页面

不知道我这样的思路可不可以。有什么坏处没有


PS一个问题

一个关于spring相关的问题

先说一下我的现在的处理流程
Java code

class 动物 {
   public String name;
   public void doAction{}

}
class deposit{
    动物 a = new 动物()
    public void doAction{
        String name = "老虎";
        a.setName = name;
        a.doAction();
   }
}




类动物是单例模式,现在我就想, 假如我现在有很多动物类型,如老虎, 猴子,我想同时都用单例模式实例化 动物类应该怎么做?




------解决方案--------------------
tomcat重新启动后,你的session就没有了,.....

5: 在用户登陆页面,在用户登陆之前,检测online表有没有对应的数据,有对应的数据,则直接让用户进入管理页面
如果你的tomcat重新启动了,现在有个用户点登录页面了,你根据什么来判断online表里有没有?仅仅是用户名?那么只要知道用户名,在别人登录系统后的4小时内,任何人登录都不需要密码了,直接进入了?你觉得安全么?
------解决方案--------------------
abstract class 动物{
 public abstract void getTeam();
 }
class 老虎 extends 动物{
 public void deposit(){
System.out.println("我的老虎");
}
 }
//测试类
public class Test1{
 public static void main(String args[]){
//多态:用父类实例化子类
动物 xxx=new 老虎();
dog.deposit();
}
}
 这样试试