Jsp線上人數統計 – 實現後台強制前台某個使用者退出

來源:互聯網
上載者:User

這是一個笨方法..我知道Tomcat內部有可以得到系統session的方法..但是我的能力沒法得到相關的類...如果有高手看到這裡....知道的話告訴下小弟....

 

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,處理退出的頁面就調用以上函數就可以了...

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.