沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

          保證網(wǎng)站用戶(或管理員)在同一時(shí)間只登陸一次在很多場(chǎng)合是很必要的!下面舉一個(gè)基于Java平臺(tái)實(shí)現(xiàn)的例子。
              第一步:創(chuàng)建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; 

          /**
           * 該監(jiān)聽器用于監(jiān)聽后臺(tái)管理員登陸。只允許統(tǒng)一管理員在同一時(shí)間登陸一次。
           * 
          @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();
                  
          // 獲取存儲(chǔ)管理員的session
                  Object o = session.getAttribute(Constants.JPXX_ADMIN_LOGIN_USERNAME_SESSION);
                  
          if(o!=null){
                      String userName 
          = o.toString();
                      
          // 登陸的用戶都存儲(chǔ)在Hashtable中,用戶退出,從Hashtable中刪除該用戶
                      Factory.getUsers().remove(userName);
                      log.error(
          "刪除用戶:" + userName + "       " + new java.util.Date());
                  }

              }

          }

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

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

          Jpxx.forceLogout()方法通過(guò)AJAX技術(shù)來(lái)強(qiáng)制注銷用戶,即調(diào)用session.invalidate()方法。

          轉(zhuǎn)載:http://www.jpxx.org/?tid=54
          主站蜘蛛池模板: 元江| 濮阳县| 顺义区| 墨竹工卡县| 长寿区| 扎囊县| 长宁区| 通渭县| 张家口市| 马边| 扎鲁特旗| 汤原县| 宣汉县| 陆河县| 绥德县| 庄浪县| 昭苏县| 通江县| 永定县| 临海市| 中阳县| 文化| 禄丰县| 德格县| 嵊州市| 托克逊县| 大英县| 陈巴尔虎旗| 都兰县| 治县。| 长阳| 仙桃市| 东乌| 嵊泗县| 玉溪市| 侯马市| 汤原县| 蒙阴县| 汉源县| 曲靖市| 华宁县|