超时有一个时间差,默认是半个小时,怎么解决??除了setmax……方法外。或者还有什么方法??

解决方案 »

  1.   

    一般可以采用数据库中设置 临时表 来处理
    一个用户登陆时象表中插进一条记录,用户离开时候删除该记录
    如想统计在线人数,简单地执行
    select count(*) from table... 即可
      

  2.   

    我如果才能知道用户的session已经为空,asp理由session_onEnd事件,jsp呢?
      

  3.   

    application对象中可以记住现在的人数啊,application的生命周期和服务器的生命周期一样长。
      

  4.   

    回coollzh(良子)
    在JSP中也能够处理类似ASP中的session_onEnd事件,据我了解要用到一个文件global.jsa ,在ASP中它的名字叫global.asa 。
    对应session_end的方法是(在JSP中)是sessionDestroy(),其中它是以session对象为参数的。我就知道这一点点了,对了,还有要把global.jsa文件必须房子和JSP程序相同的文件目录内才行。
      

  5.   

    自动刷新的代码是:
    在文件头部加上
    <meta http-equiv="refresh" content="15">
    刷新间隔时间是15秒
      

  6.   

    to:hfprogramer(wanttobeprogramer) 有的服务器不支持global.jsa,我试过在session中加入listener来监听,但似乎好象不太好使。三个用户不是同时离线,但session却同时过时。
      

  7.   

    onLineUser.java
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.util.*;public class onLineUser implements HttpSessionBindingListener {
          public onLineUser(){
        }    private Vector users=new Vector();
        public int getCount(){
            users.trimToSize();
            return users.capacity();
        }
        public boolean existUser(String userName){
            users.trimToSize();
            boolean existUser=false;
            for (int i=0;i<users.capacity();i++ )
            {
                if (userName.equals((String)users.get(i)))
                {
                    existUser=true;
                    break;
                }
            }
            return existUser;
        }    public boolean deleteUser(String userName) {
            users.trimToSize();
            if(existUser(userName)){
                int currUserIndex=-1;
                for(int i=0;i<users.capacity();i++){
                    if(userName.equals((String)users.get(i))){
                        currUserIndex=i;
                        break;
                    }
                }
                if (currUserIndex!=-1){
                    users.remove(currUserIndex);
                    users.trimToSize();
                    return true;
                }
            }
            return false;
        }    public Vector getOnLineUser()
        {
            return users;
        }
          public void valueBound(HttpSessionBindingEvent e) {
            users.trimToSize();
            if(!existUser(e.getName())){
                users.add(e.getName());
                System.out.print(e.getName()+"\t   登入到系统\t"+(new Date()));
                System.out.println("      在线用户数为:"+getCount());
            }else
                System.out.println(e.getName()+"已经存在");
          }      public void valueUnbound(HttpSessionBindingEvent e) {
            users.trimToSize();
            String userName=e.getName();
            deleteUser(userName);
            System.out.print(userName+"\t   退出系统\t"+(new Date()));
            System.out.println("      在线用户数为:"+getCount());
          }
    }jsp:
    <%@ page contentType="text/html;charset=gb2312" %> 
    <%@ page import="java.util.*" %> 
    <jsp:useBean id="onlineuser" class="temp.jb.onLineUser" scope="application"/>
    <html> 
    <head> 
    </head>
    <body onUnload="postMessage()"> 
    <center> 
       <p><h1>登陆成功,欢迎访问</h1></p>
    </center>
    <%   session = request.getSession(false); %> 
    <% 
        String username=request.getParameter("username");
        if (onlineuser.existUser(username)){
            out.println("用户<font color=red>"+username+"</font>已经登陆!");
        }else{
           session.setMaxInactiveInterval(50); //Sesion有效时长,以秒为单位
            session.setAttribute(username,onlineuser); 
            out.println("欢迎新用户:<font color=red>"+username+"</font>登陆到系统!");
        }
        out.println("<br>当前在线用户人数:<font color=red>"+onlineuser.getCount()+"</font><br>");
        String ip = request.getRemoteAddr();
        out.println("<br>IP:<font color=red>"+ip+"</font><br>");
        Vector vt=onlineuser.getOnLineUser();
        Enumeration e = vt.elements();
        out.println("在线用户列表");
        out.println("<table border=1>");
        out.println("<tr><td>用户名</td></tr>");
          while(e.hasMoreElements()){
            out.println("<tr><td>");
            out.println((String)e.nextElement()+"<br>");
            out.println("</td></tr>");
        }
        out.println("</table>");
          
    %> 
    <center> 
       <p> </p>
       [<a href="javascript:window.close()">关闭窗口</a>]
    <%
        out.println("<p><a href='logout.jsp?username="+username+"'>退出系统</a></p>");
    %>
    </center> 
    <Script>
    function postMessage(){   
       <%onlineuser.deleteUser(request.getParameter("username"));%>
       }
    </Script>
    </body> 
    </html>
      

  8.   

    <Script>
    function postMessage(){   
       <%onlineuser.deleteUser(request.getParameter("username"));%>
       }
    </Script>这样做有问题
    jsp会有限于javascript编译执行