CountOnLineUser.java
/*
Power By 24COMIC
Design:LULU
 
原理
構建監聽器,當有session名稱為jvod_user被建立,觸發監聽器,調用方法
讀取application中名為OLU的HashMap物件,每個HashMap的值我的程式中是一個UserItem物件
將使用者session的sessionId增加到OLU中....put(使用者名,sessionId)
再將整個HashMap物件保存到application中...
 
當使用者sessiong過期或者銷毀,,就刪除OLU中的物件健值
 
e-mail:smildlzj@hotmail.com
*/
 
package com.jvod.System;
import java.util.HashMap;
 
import javax.servlet.*;
import javax.servlet.HTTP.*;
 
import com.jvod.item.UserItem;
 
public class CountOnLineUser implements HttpSessionAttributeListener
{
public CountOnLineUser()
{
//System.out.println("-------init count");
}
public void attributeAdded(HttpSessionBindingEvent se)
{
try{
//System.out.println("-------se.getName():"+se.getName());
if(se.getName().equals("jvod_user"))
{
HttpSession session=se.getSession();
//System.out.println("-------session創建:"+session.getId());
ServletCoNtext sc = session.getServletCoNtext();
HashMap OLU=(HashMap)sc.getAttribute("OnLineUser");
UserItem userItem=(UserItem)se.getValue();
if(userItem!=null)//為已登錄使用者
{
if(OLU.get(userItem.getName())!=null)//之前已經重複登錄
{
//得到之前的sessionId
String SessionId=(String) OLU.get(userItem.getName());
//銷毀該使用者在別處登錄的session
//call remove
//System.out.println("-------call remove same session");
SessionManage SM=new SessionManage();
SM.setServletCoNtext(sc);
//System.out.println("-------result of remove:"+SM.SessionRemove(SessionId));
}
 
//增加新sessionId
OLU.put(userItem.getName(),session.getId());
sc.setAttribute("OnLineUser",OLU);
}
}
}catch(Exception e){
System.out.println(e.toString());
}
 
}
 
public void attributeRemoved(HttpSessionBindingEvent se)
{
try{
if(se.getName().equals("jvod_user"))
{
HttpSession session=se.getSession();
//System.out.println("-------session銷毀:"+session.getId());
ServletCoNtext sc = session.getServletCoNtext();
HashMap OLU=(HashMap)sc.getAttribute("OnLineUser");
UserItem userItem=(UserItem)se.getValue();
if(userItem!=null)//為已登錄使用者
{
OLU.remove(userItem.getName());
sc.setAttribute("OnLineUser",OLU);
}
}
}catch(Exception e){
System.out.println(e.toString());
}
}
 
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
 
}
 
}
 
然後用java.net.HttpURLConnection類比用戶端
 
public boolean SessionRemove(String sessionId)
{
try{
 
..................
URL url = new URL(前臺使用者銷毀session頁面)
HttpURLConnection conn = null;
conn=(HttpURLConnection)url.openConnection();|
conn.setRequestProperty("Cookie", "JSESSIONID="+sessionId+";"); //設置使用者的session id
 
.......
 
}
 
發送使用者session,類比用戶端存取含有session.removeAttribute("jvod_user");的頁面即可完成強制退出功能


 
後臺頁面就是讀取application中的OLU物件遍歷HashMap得到使用者清單...和sessionID,處理退出的頁面就調用以上函數就可以了...
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()