当前位置: 代码迷 >> J2SE >> ,java网站用户登陆后持久在线的思路
  详细解决方案

,java网站用户登陆后持久在线的思路

热度:91   发布时间:2016-04-24 00:32:40.0
求助,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();
}
}
 这样试试
  相关解决方案