浏览 2941 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-02
为了防止用户重复登陆和保证客户端数据的一致性,希望程序里能禁止:1,一个用户只能同时从一个客户端登陆;2,数个用户同时共用一台机器(即一台客户端同时只允许一个实例). 对于问题,我想通过scope="application"设置ipaddress和loginuser来解决。用户登陆时进行ip和user的注册,如果查询到已登陆,或ip被占用,则禁止登陆。 但是,请问如果用户关闭页面,tapestry4又如何获取离线的信息呢?重新更新ipaddress和loginuser。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-13
/** 判断该判断同一个用户是否同时在两台机子上登陆:begin
*/ //根据用户登录名或ID来判断 //轮询hashtable中的信息 HttpSession session =cycle.getRequestContext().getSession(); Enumeration v_enum= CacheData.ht.keys(); while(v_enum.hasMoreElements()) { String key=(String)v_enum.nextElement(); HttpSession v_session=(HttpSession)CacheData.ht.get(key); if(v_session==null) { CacheData.ht.remove(key); continue; } String v_temp = new String(); try { if(v_session.getId()==null) { continue; } else { v_temp=v_session.getAttribute("loginname").toString(); } } catch(Exception e) { } if(v_temp.equals(this.getUsername())) { //已经存在了,则后替代前 try { if(v_session!=session) { v_session.invalidate(); CacheData.ht.remove(key); } } catch(Exception e) { } } } try { session.setAttribute("loginname",this.getUsername()); String aaa = (String)session.getAttribute("loginname"); CacheData.ht.put(session.getId(),session); } catch(Exception e) { e.printStackTrace(); } /************ CacheData.java package com.ce.security.util; import java.util.Hashtable; import java.util.Iterator; import javax.servlet.http.HttpSession; public class CacheData { public CacheData() { } public static Hashtable ht = new Hashtable(); static public Iterator getSet() { return ht.values().iterator(); } static public HttpSession getSession(String sessionId) { return (HttpSession)ht.get(sessionId); } } *************/ |
|
返回顶楼 | |