目前遇到這樣的問題:
使用者登入之後,不允許同時登入多個使用者這個已經實現)。但是如果使用者以外關閉了瀏覽器之後,要等到session逾時才能 再一次登入,真是太悲劇了。
so。。。現在的解決方案便是,允許第二次登入,登入之後要將第一次登入的session銷毀
藉助weblogic.jar 反射擷取servletContext 中的sessionContext,然後將其opensession屬性中的sessionId 刪除即可達到目的,代碼如下:我們的項目是將使用者第一次登入的session存放到了緩衝中去,在使用者第二次進來的時候會先擷取上一次的session,存在的話就將其從servletContext中刪掉)
ServletContext scope = (ServletContext)request.getSession().getServletContext();
Class clazz = weblogic.servlet.internal.WebAppServletContext.class;
Field f = clazz.getDeclaredField("sessionContext");
f.setAccessible(true);
//--取得session context
weblogic.servlet.internal.session.SessionContext sc = (weblogic.servlet.internal.session.SessionContext)f.get(scope);
clazz = weblogic.servlet.internal.session.SessionContext.class;
f = clazz.getDeclaredField("openSessions");
f.setAccessible(true);
//--拿到終的sessionMap
Hashtable sessionMap = (Hashtable)f.get(sc);
//第一種直接刪除該sessionID
System.out.println("要刪除的sessiongid "+loginSession.getId()+"==========================");
System.out.println("sessionMap 中是否含有將要刪除的id"+ sessionMap.containsKey(loginSession.getId().split("!")[0])+"================");
sessionMap.remove(loginSession.getId().split("!")[0]);
效果:
開啟一個瀏覽器登入xxx使用者
再開啟一個瀏覽器登入xxx使用者
然後再在第一個瀏覽器中點擊任意連結會跳轉到登入頁面。
本文出自 “E·F” 部落格,謝絕轉載!