社区
Web 开发
帖子详情
[讨论]在线用户情况的统计!谢谢!
flybird079
2003-08-01 11:34:14
最近在做一个项目时遇到这样一个需求,需要统计通过身份验证的用户在线情况,目的是为了实现防止重复登录和对服务器负载情况的跟踪。觉得没有什么好的解决办法,如果在数据库中加入在线用户表,那在线用户的添加是没有什么问题,但是用户退出时(非正常退出,如关闭浏览器,死机重启)怎么处理表呢?
请问有谁做过这样的东东或者有什么好的想法,请指教。和大家交流一下,至于分可以再加,谢谢!
(JSP平台上)
...全文
109
17
打赏
收藏
[讨论]在线用户情况的统计!谢谢!
最近在做一个项目时遇到这样一个需求,需要统计通过身份验证的用户在线情况,目的是为了实现防止重复登录和对服务器负载情况的跟踪。觉得没有什么好的解决办法,如果在数据库中加入在线用户表,那在线用户的添加是没有什么问题,但是用户退出时(非正常退出,如关闭浏览器,死机重启)怎么处理表呢? 请问有谁做过这样的东东或者有什么好的想法,请指教。和大家交流一下,至于分可以再加,谢谢! (JSP平台上)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
flybird079
2003-10-16
打赏
举报
回复
现在问题是初步解决了,使用 HttpSessionBindingListener 实现,但是如果用户是关闭浏览器的话还是要等session失效时间到了才能监听到。这样造成一个结果是在最坏情况下如果session失效时间设为40分钟,服务器已达到最高负载并且所有用户处在同一个配电区域,此时如果断电了,服务器只能等session失效也就是最多40分钟后才能将负载清空,也就是说所有的用户将有靠近40分钟无法使用服务器的资源。这种情况也比较难处理啊
ychunshui
2003-09-17
打赏
举报
回复
acl是什么来的?
shipp
2003-09-16
打赏
举报
回复
用ACL
leshui
2003-09-16
打赏
举报
回复
但是很灵活:)
可以自己设掉线的时间什么的
dmhorse
2003-09-16
打赏
举报
回复
这样做的话比不上用 HttpSessionBindingListener 这种方法直接
leshui
2003-09-16
打赏
举报
回复
4。还要把刷新的页面包含到所有的页面,我这里是在一个公用的top里,可以设成ifram
leshui
2003-09-16
打赏
举报
回复
我这里是这么做的:
1。在用户表里设一个是否在线和最后动作时间
2。做一个不断刷新的页面,刷新间隔可以自己设,把当前用户的最后动作时间更新为当前时间
3。统计在线用户的时候取出当前时间和最后动作时间的间隔,如果小于一个间隔就认为是在线
Rayy
2003-09-16
打赏
举报
回复
期待更好的解决方法,思路!!
squallzeng
2003-09-15
打赏
举报
回复
关注有好思路给一份!!!!
mail:squallzeng@hotmail.com
dmhorse
2003-09-15
打赏
举报
回复
Agree implement HttpSessionBindingListener
The best way.
ychunshui
2003-09-15
打赏
举报
回复
session.setMaxInactiveInterval(50); // Session有效时长,以秒为单位
如果不设session有效时间,请问如何在关闭浏览器时使session无效
wyhgg
2003-09-13
打赏
举报
回复
我做过,不很理想,
如果楼上有好办法。
给我一点思路。
wyhgg@sina.com.cn
dogcai
2003-09-13
打赏
举报
回复
谢谢楼上的,学到了很多。
Yssss1980
2003-09-13
打赏
举报
回复
上次看到的一个解答,找不到源贴
/**这是管理user信息的类
文件名为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文件
文件名为onLineUser.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="onLineUser,java.util.*" %>
<jsp:useBean id="onlineuser" class="onLineUser" scope="application"/>
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<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); file://Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println("欢迎新用户:<font color=red>"+username+"</font>登陆到系统!");
}
out.println("<br>当前在线用户人数:<font color=red>"+onlineuser.getCount()+"</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>elapsed制作</p>
<p> </p>
<%
out.println("<p><a href='logout.jsp?username="+username+"'>退出系统</a></p>");
%>
</center>
</body>
</html>
////////////////////////////////////////////////////////////////////////////////////
<%
/**这是用户退出的jsp文件
文件名为logout.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="onLineUser,java.util.*" %>
<jsp:useBean id="onlineuser" class="onLineUser" scope="application"/>
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<center>
<p><h1>登陆成功,欢迎您访问!</h1></p>
</center>
<%
String username=request.getParameter("username");
if(onlineuser.deleteUser(username))
out.println(username+"已经退出系统!");
else
out.println(username+"没有登陆到系统!");
%>
<center>
<p>elapsed制作</p>
<p> </p>
<p><a href="logout.jsp">退出系统</a></p>
</center>
</body>
xqi8
2003-09-13
打赏
举报
回复
up
liujiboy
2003-09-13
打赏
举报
回复
我有一种方法是用javascript在客户端断开的时候传回退出的信息,但是无法防止死机。
另一种方法是使用activex控件,或者是java applet。还有就是使用java web start构建一个胖客户端的程序。
我也期待有更好的解决方法。
ychunshui
2003-09-13
打赏
举报
回复
关注
在线
用户
统计
声明:本文来自网上,由于简明、易懂,我将其收藏一、
用户
显示页面的使用 首先,我们来看看怎样实现当前网站的访问
用户
数量,程序代码如下: <%@ Page Language="c#" debug="true" %> <html> <head> <SCRIPT LANGUAGE="c#" RUNAT="server"> private void Page_Loa
Redis助力高并发网站:
在线
用户
统计
不再是难题!
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!Hello,大家好!我是小米,一个积极分享技术的小伙伴。今天咱们要聊的是在高并发场景中如何显示网站的
在线
/并发
用户
数,重点是使用Redis进行
统计
。我们将使用Java和Lettuce库来实现这一功能。让我们开始吧!
Java
统计
用户
在线
人数,这样做才优雅!
接下来剖析Session的删除工作,获取当前Session对象,这里有之前传递过来的IP,在进行删除操作的时候,要注意此处,删除的是List中的sessions,删除之后,还要判断其IP的是否要删除,如果List中没有该元素,则说明当前IP所发出的会话全部关闭,就可以从map中将当前IP对应的Entry对象删除,否则,当前IP所发出的会话任存在,那么使用put方法将变化过的List写回到map。其实啊我们的电脑可以有三个IP,在访问服务器的时候,服务器的IP多写几个,相当于本机的IP多出来几个。
统计
当前
在线
用户
数、平均访问时长、
在线
用户
最高数等实现
为什么80%的码农都做不了架构师?>>> ...
Web 开发
81,111
社区成员
341,725
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章