请问如何统计在线人数 给客户做了个网站,客户要求统计在线人数,包括不登录的,打开网页的,都算,这样用session就不行了,请问有什么好办法.急急急. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用session监听器吧代码参考部分SessionCounter.java==============package SessionCount;import javax.servlet.*;import javax.servlet.http.*;public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; public void sessionCreated(HttpSessionEvent se) { activeSessions++; } public void sessionDestroyed(HttpSessionEvent se) { if(activeSessions > 0) activeSessions--; } public static int getActiveSessions() { return activeSessions; }} web.xml=========<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">...............<!-- Listeners --><listener><listener-class>SessionCount.SessionCounter</listener-class>...............</listener></web-app>===============test.jsp<%@ page language="Java" contentType="text/html;charset=GBK"%><%@ page import="java.sql.*"%><%@ page import="SessionCount.SessionCounter" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><title>无标题文档</title><body bgcolor="#FFFFFF"> 在线:<%=SessionCounter.getActiveSessions()%> </body></html> "包括不登录的,打开网页的,都算,这样用session就不行了", 他不登录也是有session的。 session 跟登录不登录没有关系楼主搞清楚基础概念哦。。 import java.util.Map;import java.util.HashMap;import javax.servlet.http.*;import javax.servlet.ServletContext;public class UserInfo implements HttpSessionBindingListener {// 用户信息int userId;String userName;....../** * 当UserInfo类被绑定到session中时触发这个事件 * 具体信息请参见Servlet/JSPs的规范 */public void valueBound(HttpSessionBindingEvent event) {HttpSession session = event.getSession ();ServletContext ctx = session.getServletContext ();Map map = (Map)ctx.getAttribute ("users");if (map == null) { // 如果是服务器启动后的第一个登录用户,新建一个容器map = new HashMap ();ctx.setAttribute ("users", map);}map.put (userName, this.userName); // 把自己加入容器中}/** * 当UserInfo类从session中删除时触发这个事件 * 具体信息请参见Servlet/JSPs的规范 */public void valueUnbound(HttpSessionBindingEvent event) {HttpSession session = event.getSession ();ServletContext ctx = session.getServletContext ();Map map = (Map)ctx.getAttribute ("users");map.remove (this.userName); // 把自己从容器中删除}......}JSP页面中使用以下代码: <%int userCount = 0;java.util.Map map = (java.util.Map)application.getAttribute ("users");if (map == 0) userCount = 0;else userCount = map.size ();%>; HttpSessionBindingListener 实现这个的似乎是有操作session比如session.setAttribute("user",user);这样的,可以计算登录的用户有多少.再上面的那个呢,可以计算所有在这个网站的人数有多少.了一个用户一个session,包括不登录的.不知道这样说对不.网站上看到的,在线人数,注册用户两个区别是不是这两个的区别啊. 用session监听,创建一个session的时候,说明一个用户来了,销毁一个session的时候,说明一个用户走了,登录一个用户的时候,说明是注册用户,另外在销毁一个session的时候,你判断下是不是注册用户,不就完了,这就会统计出在线用户,在线的注册会员了。 然后怎么统计出在线人数呢?可以判断session的数量吗? session监听器能够很好地统计用户在线人数的功能! 打开浏览器 就有session了啊 用监听器吧 http是无状态协议,服务器无法保持连接,通过Session服务器可以保持会话不登陆也是有session产生的,我觉得session可行。 用APPLICATION啦,这个和SESSION是JSP的9个隐含对象之一,它的作用域比SESSION要大!! 写个类,包含两个静态成员,一个是在线人数,一个是登录的注册用户,来个session加一,走个session减一,不就得了。 用集合放到session里面,然后取出判断集合的长度,集合的size()就行吧 DMI动态方法调用问题 SSH框架适合做什么样的项目 怎么让Action等一会儿再跳转? 新手问题:myeclipse8.6如何安装echo3 如何开发验证码为中文的JSP? 菜鸟提问 为什么我在mysql中存文本可以,但不能存图片 为什么连接释放不掉呢? 特别急的问题!!!!!!!!!!!!!!给高分!!!!!!!!!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ android程序http请求失败,使用浏览器打开之后,就可以了 关于sql server 2005的连接问题 乱码问题
代码参考部分SessionCounter.java
==============
package SessionCount;
import javax.servlet.*;
import javax.servlet.http.*;public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
public static int getActiveSessions() {
return activeSessions;
}
}
web.xml
=========
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...............
<!-- Listeners -->
<listener>
<listener-class>
SessionCount.SessionCounter
</listener-class>
...............
</listener>
</web-app>
===============
test.jsp
<%@ page language="Java" contentType="text/html;charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="SessionCount.SessionCounter" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>无标题文档</title>
<body bgcolor="#FFFFFF">
在线:<%=SessionCounter.getActiveSessions()%>
</body></html>
import java.util.Map;
import java.util.HashMap;
import javax.servlet.http.*;
import javax.servlet.ServletContext;
public class UserInfo implements HttpSessionBindingListener {
// 用户信息
int userId;
String userName;
......
/**
* 当UserInfo类被绑定到session中时触发这个事件
* 具体信息请参见Servlet/JSPs的规范
*/
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession ();
ServletContext ctx = session.getServletContext ();
Map map = (Map)ctx.getAttribute ("users");
if (map == null) { // 如果是服务器启动后的第一个登录用户,新建一个容器
map = new HashMap ();
ctx.setAttribute ("users", map);
}
map.put (userName, this.userName); // 把自己加入容器中
}
/**
* 当UserInfo类从session中删除时触发这个事件
* 具体信息请参见Servlet/JSPs的规范
*/
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession ();
ServletContext ctx = session.getServletContext ();
Map map = (Map)ctx.getAttribute ("users");
map.remove (this.userName); // 把自己从容器中删除
}
......
}
JSP页面中使用以下代码:
<%
int userCount = 0;
java.util.Map map = (java.util.Map)application.getAttribute ("users");
if (map == 0) userCount = 0;
else userCount = map.size ();
%>;
再上面的那个呢,可以计算所有在这个网站的人数有多少.了一个用户一个session,包括不登录的.
不知道这样说对不.
网站上看到的,在线人数,注册用户两个区别是不是这两个的区别啊.
销毁一个session的时候,说明一个用户走了,
登录一个用户的时候,说明是注册用户,
另外在销毁一个session的时候,你判断下是不是注册用户,不就完了,
这就会统计出在线用户,在线的注册会员了。
不登陆也是有session产生的,我觉得session可行。
加一,走个session减一,不就得了。