沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          保證網站用戶(或管理員)在同一時間只登陸一次在很多場合是很必要的!下面舉一個基于Java平臺實現的例子。
              第一步:創建SessionListenter類

           

          import javax.servlet.http.HttpSession;
          import javax.servlet.http.HttpSessionEvent;
          import javax.servlet.http.HttpSessionListener;
          import org.apache.log4j.Logger;
          import org.jpxx.sw.Constants;
          import org.jpxx.sw.Factory; 

          /**
           * 該監聽器用于監聽后臺管理員登陸。只允許統一管理員在同一時間登陸一次。
           * 
          @author Jun Li
           * 
          @version  $Revision: 1.0.2 $, $Date: 2009/01/05 $
           * 
          @since 1.0.0
           
          */

          public class SessionListener implements HttpSessionListener 

              Logger log 
          = Factory.getSingletonInstance().getLogger(SessionListener.class);
              
          public void sessionCreated(HttpSessionEvent event) {
              }
           

              
          public void sessionDestroyed(HttpSessionEvent event) {
                  HttpSession session 
          = event.getSession();
                  
          // 獲取存儲管理員的session
                  Object o = session.getAttribute(Constants.JPXX_ADMIN_LOGIN_USERNAME_SESSION);
                  
          if(o!=null){
                      String userName 
          = o.toString();
                      
          // 登陸的用戶都存儲在Hashtable中,用戶退出,從Hashtable中刪除該用戶
                      Factory.getUsers().remove(userName);
                      log.error(
          "刪除用戶:" + userName + "       " + new java.util.Date());
                  }

              }

          }

          說明:由于該類來自于項目,有很多操作都進行了封裝,您稍作修改即可正常使用。注釋掉Logger,聲明一個靜態變量private static Hashtable user = new Hashtable();在sessionCreated()方法中將剛登陸的用戶添加到user中。您還需要寫注銷的頁面(jsp或者servlet),在頁面里面調用session.invalidate(); 該方法會觸發sessionDestroyed()事件!

              第二部:將該監聽器注冊到web.xml
          <listener>
                  
          <listener-class>org.jpxx.sw.business.SessionListener</listener-class>
          </listener>
          說明:僅僅依靠session監聽器不可能100%可靠,有可能用戶不正常退出(例如直接關閉瀏覽器、系統斷電等等)。針對直接關閉瀏覽器有如下解決方案:在被關閉的頁面里面插入如下語句:
          <body scroll="no" onUnload="Jpxx.forceLogout();" onbeforeunload="Jpxx.forceLogout();">

          Jpxx.forceLogout()方法通過AJAX技術來強制注銷用戶,即調用session.invalidate()方法。

          轉載:http://www.jpxx.org/?tid=54
          主站蜘蛛池模板: 梨树县| 呼玛县| 依兰县| 安龙县| 聂拉木县| 徐汇区| 剑川县| 法库县| 荥阳市| 大埔区| 汉川市| 泾源县| 萝北县| 临桂县| 尼勒克县| 德格县| 宁陕县| 游戏| 永吉县| 阜平县| 土默特左旗| 绥芬河市| 恩平市| 商水县| 安福县| 鄂托克旗| 于都县| 四子王旗| 云南省| 监利县| 长白| 华宁县| 清徐县| 明水县| 威远县| 保德县| 博爱县| 陆川县| 米林县| 手游| 滨海县|