部分论坛就有此功能,
把鼠标停留在会员头像后,
弹出会员信息,
其中有一项,
会员在线 或 会员离线,
这个功能是怎么实现的。

解答满意再送100分。

解决方案 »

  1.   

    在session里加一个变量,比如online=YES或NO
      

  2.   

    设置在线状态
    <%
     session.setAttribute("online", "YES"); 
    %>
    获取在线状态
    <%
     if(session.GetAttribute("online").equals("YES"))) 
         out.println("在线");
     else out.println("离线");
    %>
      

  3.   

    顶三楼,用户登录后把个人信息存进session里面,然后在页面读取判断一下。
      

  4.   

    放session里也是一个考虑的方法。但获取,但好是采用ajax等异步获取的方法,这样才能与后台数据进行交互。
      

  5.   

    当鼠标移动到头像的时候、、、取到这个用户的id、、、、然后利用这个id去用户表里面这个用户是否在线的字段、、、、当用户登录的时候、、、user.setState(true);当用户退出的时候...users.setState(false);你要做的只是判断一下这个state是否为true就可以了。
      

  6.   

    用session吧,这个东西比较实用的。
       具体的实现LZ具体的看的哈,应该没有问题的
      

  7.   

    除了#6,其他的全是信口开河什么ajax,什么放数据库,你关掉网页更新数据库能100%实现保证成功吗?如果网页关掉没问题,那么断电了呢?session的范围只是对自己,而对别人无效。以上回答,鉴定完毕
      

  8.   

    首先设置要保存Login内容的地点。
    对于同时在线大概只有几万人的小应用来说,不需要保存进数据库,而超过这个数字,就需要特别的处理,Memcache,或者数据库等。具体看情况吧,这里只给出参考的单例类接口。package org.listener;import java.util.HashMap;
    import java.util.Map;/**
     * 在线用户管理接口
     */
    public final class OnlineInfo {

    private static OnlineInfo onlineInfo = new OnlineInfo();

    private OnlineInfo() {}

    private Map<String, String> info = new HashMap<String, String>();

    public static OnlineInfo getInstance() {
    return onlineInfo;
    }

    /**
     * 用户创建Session时自动调用
     */
    public void add(String sessionId) {
    info.put(sessionId, "");
    }

    /**
     * 用户登录时自动调用
     */
    public void add(String sessionId, String loginId) {
    info.put(sessionId, loginId);
    }

    /**
     * 用户Session超时时自动调用
     */
    public void remove(String sessionId) {
    info.remove(sessionId);
    }

    /**
     * 在线用户数量
     */
    public long size() {
    return info.size();
    }

    /**
     * 判断用户是否在线
     */
    public boolean isOnline(String loginId) {
    return info.containsValue(loginId);
    }
    }接下来,根据javaEE标准,要知道有HttpSessionListener这个东西package org.listener;import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class WatchOnlineListener implements HttpSessionListener { @Override
    public void sessionCreated(HttpSessionEvent event) {
    OnlineInfo info = OnlineInfo.getInstance();
    info.add(event.getSession().getId());
    } @Override
    public void sessionDestroyed(HttpSessionEvent event) {
    OnlineInfo info = OnlineInfo.getInstance();
    info.remove(event.getSession().getId());
    }}web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>AjaxCode</display-name>
      <listener>
       <listener-class>org.listener.WatchOnlineListener</listener-class>
      </listener>
      <session-config>
       <session-timeout>1</session-timeout>
      </session-config>
      <servlet>
       <servlet-name>SessionServlet</servlet-name>
       <servlet-class>org.listener.SessionServlet</servlet-class>
      </servlet>
      <servlet-mapping>
       <servlet-name>SessionServlet</servlet-name>
       <url-pattern>/SessionServlet</url-pattern>
      </servlet-mapping>
      <servlet>
    </web-app>测试用Servlet:
    package org.listener;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class SessionServlet extends HttpServlet {
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 用户创建session
    request.getSession();

    // 登录的时候,调用OnlineInfo.getInstance().add(sessionId, loginId)来置换info中id的设置
    } /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    }
    }接下来在浏览器中访问这个Servlet,sessionCreated自动调用,然后关闭浏览器,等几分钟左右,sessionDestroyed自动调用在这个循环中,打开浏览器,进入某个Servlet的时候,
    1.创建Session(成为游客)
    2.login(在Id上写上loginId)。
    以上两部做完后就可以判断一个loginId是否在线了在以上过程中,如果session超时则移除
      

  9.   

    session都有个生命周期的嘛,服务器自动帮你算的啦,到时间自动帮你销毁
      

  10.   

    是不是检查别人是否在线?这个的话和我前几天做的用户多重并发也差不了多少!具体情况具体分析。如果数据多的话可以保存在数据库里,数据少点的话就可以把每个用户的sessionId保存到session中。然后保存在一个集合里面再保存到全局变量里面,点击的时候只要查找全局变量里面根据用户名查找这个sessionID是否存在。