日期:2014-05-17  浏览次数:20578 次

怎么判断用户离开了界面
我有一个jsp界面,怎么判断用户进入和离开了界面呢。又怎么判断是谁离开了界面。。。是不是用seesion啊。怎么用。具体一点哇。谢谢大家。

------解决方案--------------------
比如这个页面,不管是跳转了还是直接关闭浏览器,js里面的方法end()都会执行:

HTML code

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <script type="text/javascript">
      function end(){
          alert("aaa");
          //可以调用一个form的submit()方法,或者调用一个ajax 向后台提交请求
      }
  </script>
    <title>MyHtml.html</title>
    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body onunload="end();">
  </body>
</html>

------解决方案--------------------
session监听类:
Java code

package com.banner.servlet;


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class OnlineUserBindingListener implements HttpSessionBindingListener {
         String username;
        public OnlineUserBindingListener(){
        }
        
        public OnlineUserBindingListener(String username){
            this.username=username;
        }
        public void valueBound(HttpSessionBindingEvent event) {
            HttpSession session = event.getSession();
            ServletContext application = session.getServletContext();
            // 把用户名放入在线列表
            List onlineUserList = (List) application.getAttribute("onlineUserList");
            // 第一次使用前,需要初始化
            if (onlineUserList == null) {
                onlineUserList = new ArrayList();
                
            }
            onlineUserList.add(this.username);
            application.setAttribute("onlineUserList", onlineUserList);
        }

        public void valueUnbound(HttpSessionBindingEvent event) {
            HttpSession session = event.getSession();
            ServletContext application = session.getServletContext();

            // 从在线列表中删除用户名
            List onlineUserList = (List) application.getAttribute("onlineUserList");
            onlineUserList.remove(this.username);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            System.out.println(this.username + "退出系统。");
            System.out.println("退出时间"+sdf.format(new Date()));
        }
    
}

------解决方案--------------------
刚才看了篇文章 关于判断退出浏览器的 用Javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。不过对于浏览器崩溃或强行杀死进程等非常手段是不能实现的。。。。 具体的怎么操作自己再百度下吧!!!!
------解决方案--------------------
http://topic.csdn.net/t/20010528/21/138139.html
------解决方案--------------------
哈哈,这个问题我上个项目也遇到了,好在我解决了,解决这个问题有几个步骤
1、有拿到当前登录者的信息,如userid,这个容易,用session,当用户一进入页面时,用jspuserbean或servlet更新数据库中的一个字段,就是是否在线,(如isonline,0是离线,1是在线,这里isonline=1)。
2、用dwr将session中用户名字显示出来,在页面中不断刷新,dwr有这个功能。
3、写一个session监听。
4、将web.xml中session的过期时间设置为1分钟,这样用户只要关了浏览器,session在1分钟后将消失,session监听器将监听到,些时更新数据库isonline=0.

上面的第2个步骤有很多实现方式,其实这一步是最重要的,我一开始第2步用的jqurey的心跳提示,不会的话可以网上查下,很简单,后来觉得dwr更正规一些,嘿嘿,就学了下dwr,3个小时搞定。
再有问题可以加我qq:79312510
------解决方案--------------------