社区
Web 开发
帖子详情
[100分讨论] 如何判断一个用户是否在线!?
zhaoqiubo
2003-12-12 09:13:42
在每个用户登录以后我都把他的用户信息放到SESSION中了,如何得到在线用户的列表呢?
...全文
98
27
打赏
收藏
[100分讨论] 如何判断一个用户是否在线!?
在每个用户登录以后我都把他的用户信息放到SESSION中了,如何得到在线用户的列表呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhenshangzhengren
2010-06-21
打赏
举报
回复
mark
zhaoqiubo
2003-12-15
打赏
举报
回复
我知道了,用其他方法的朋友们也来说说呀!
yourworking
2003-12-12
打赏
举报
回复
好象有个30分钟期限
不知如何处理????
hawkhxz
2003-12-12
打赏
举报
回复
关闭IE,立即死掉,其它等待一段时间
wuyg719
2003-12-12
打赏
举报
回复
session是如何死掉和失效的呢?
超时,直接关闭IE,网络断线,客户端死机,这些情况session会自动死掉(失效)?
是立即死掉(失效)还是等待一段时间?
minger214
2003-12-12
打赏
举报
回复
帮你up......
gks_cn
2003-12-12
打赏
举报
回复
package sys.user;
import util.db.DB;
import java.sql.*;
import util.string.StringUtil;
import sun.jdbc.rowset.CachedRowSet;
import javax.servlet.http.*;
import java.util.ArrayList;
import sys.all.SysLockIp;
public class UserSession
implements HttpSessionBindingListener {
private String userName;
private String userId;
private String userType = "";
private String gotoUrl;
private boolean isLogin;
private String password;
public static ArrayList userList = new ArrayList();
public void valueBound(HttpSessionBindingEvent event) {
boolean dup = false;
for (int i = 0; i < this.userList.size(); i++) {
UserSession u = (UserSession)this.userList.get(i);
if (u != null && u.getUserName() != null &&
u.getUserId().equals(this.getUserId())) { // forbid add a duplicate user
dup = true;
}
}
if (!dup) {
this.userList.add(this);
}
System.out.println(this.userId + " added into userlist");
}
public void valueUnbound(HttpSessionBindingEvent event) {
this.userList.remove(this);
System.out.println(this.userId + " remove from userlist");
}
}
junyi2003
2003-12-12
打赏
举报
回复
Mark
chmask
2003-12-12
打赏
举报
回复
感觉在库里加一个字段比较好!
wuyg719
2003-12-12
打赏
举报
回复
在 APPLICATION 里建个 用户数组, 每个用户登陆后 将他的信息 保存到SESSION 和 该数组里,
如果SESSION死掉 就在书组 里找到该信息 并删除
我觉得用个专门的bean比较好。用户登陆的时候在bean里面添加相应信息,session失效的时候从bean里面删除。想显示在线用户列表的话就直接从bean里面读取。
session是如何死掉和失效的呢?
超时,直接关闭IE,网络断线,客户端死机,这些情况session会自动死掉(失效)?
是立即死掉(失效)还是等待一段时间?
hansun
2003-12-12
打赏
举报
回复
关注~~~
zhaoqiubo
2003-12-12
打赏
举报
回复
有个事件监听器,不知道可不可以用到这里呢?
zhaoqiubo
2003-12-12
打赏
举报
回复
由于本人的水平实在有限,拜托yzwkk(流星飞雨)能不能帮我给您的程序加一点注释呢?
懒得优化能跑就行
2003-12-12
打赏
举报
回复
mark
yzwkk
2003-12-12
打赏
举报
回复
同意楼上的说法
以前在论坛中用过的一个方法
public static void checkUserStats(HttpServletRequest request,HttpServletResponse response,String stats){
String userName=GCookie.getCookieValue(request,"UJBBUName","");
String userPassword=GCookie.getCookieValue(request,"UJBBUPSW","");
String ip=request.getRemoteAddr();
String[] addr=IPLocalizer.search(request);
String comeFrom="";
for(int i=0;i<addr.length;i++)
comeFrom+=addr[i];
String actCome=request.getHeader("X_FORWARDED_FOR");
long statUserID=Long.parseLong(StringUtils.replace(ip,".",""));
boolean onlineSign=false;
String browser=request.getHeader("User-Agent");
ResultSet rs;
try{
String sql="";
DBConnect dbc=new DBConnect();
try{
sql="select * from bbs_online where id=?";
dbc.prepareStatement(sql);
dbc.setLong(1,statUserID);
//dbc.setBytes(2,userName.getBytes("GBK"));
rs=dbc.executeQuery();
if(rs.next())
onlineSign=true;
else
onlineSign=false;
rs.close();
}
catch(Exception e){
onlineSign=false;
}
if("".equals(userName)){
if(!onlineSign){
sql="insert into bbs_online (id,username,userclass,ip,startime,lastimebk,browser,stats,actforip,ComeFrom,actCome) values("+statUserID+",?,?,?,?,?,?,?,?,?,?)";
dbc.prepareStatement(sql);
//dbc.setLong(1,statUserID);
dbc.setString(1,"guest");
dbc.setString(2,"客人".getBytes("GBK").toString());
dbc.setString(3,ip.getBytes("GBK").toString());
dbc.setString(4,Format.getDateTime());
dbc.setString(5,Format.getDateTime());
dbc.setString(6,browser);
dbc.setString(7,stats.getBytes("GBK").toString());
if(actCome==null)
{
dbc.setString(8,"null");
dbc.setString(10,"null");
}
else
{
dbc.setString(8,actCome);
dbc.setString(10,actCome);
}
dbc.setString(9,comeFrom.getBytes("GBK").toString());
dbc.executeUpdate();
dbc.clearParameters();
}
else{
sql="update bbs_online set lastimebk=?,lastime=?,ComeFrom=?,actCome=?,stats=? where id="+statUserID;
System.out.println("1"+Format.getDateTime()+"2"+Format.getStrDateTime()+"3"+comeFrom.getBytes("GBK")+"4"+actCome+"5"+stats.getBytes("GBK")+"kill");
dbc.prepareStatement(sql);
dbc.setString(1,Format.getDateTime());
dbc.setString(2,Format.getStrDateTime());
dbc.setString(3,"'"+comeFrom.getBytes("GBK").toString()+"'");
if(actCome==null)
{
dbc.setString(4,"null");
}
else{
dbc.setString(4,actCome);
}
dbc.setString(5,"'"+stats.getBytes("GBK").toString()+"'");
//dbc.setLong(6,statUserID);
dbc.executeUpdate();
sql="update bbs_online set ComeFrom=? where id="+statUserID;
dbc.prepareStatement(sql);
dbc.setString(1,"'"+comeFrom.getBytes("GBK").toString()+"'");
dbc.executeUpdate();
dbc.clearParameters();
}
}
else{
sql="select * from bbs_online where ID="+statUserID+" or username=?";
dbc.prepareStatement(sql);
//dbc.setLong(1,statUserID);
dbc.setBytes(1,userName.getBytes("GBK"));
rs=dbc.executeQuery();
if(rs.next())
onlineSign=true;
else
onlineSign=false;
dbc.clearParameters();
try{
User theUser=new User(userName,userPassword,4);
if(onlineSign){
sql="update bbs_online set id="+statUserID+",userName=?,userClass=?,lastimebk=?,lastime=?,ComeFrom=?,actCome=?,stats=? where id=? or username=?";
dbc.prepareStatement(sql);
//dbc.setLong(1,statUserID);
dbc.setBytes(1,userName.getBytes("GBK"));
dbc.setBytes(2,getUserClass(theUser.getUserClass()).getBytes("GBK"));
dbc.setString(3,Format.getDateTime());
dbc.setString(4,Format.getStrDateTime());
dbc.setBytes(5,comeFrom.getBytes("GBK"));
dbc.setString(6,actCome);
dbc.setBytes(7,stats.getBytes("GBK"));
dbc.setLong(8,statUserID);
dbc.setBytes(9,userName.getBytes("GBK"));
dbc.executeUpdate();
dbc.clearParameters();
}
else{
sql="insert into bbs_online(id,username,userclass,ip,startime,lastimebk,browser,stats,actforip,ComeFrom,actCome) values("+statUserID+",?,?,?,?,?,?,?,?,?,?)";
dbc.prepareStatement(sql);
//dbc.setLong(1,statUserID);//statUserID);
dbc.setString(1,userName.getBytes("GBK").toString());
dbc.setString(2,getUserClass(theUser.getUserClass()).getBytes("GBK").toString());
dbc.setString(3,ip);
dbc.setString(4,Format.getDateTime());
dbc.setString(5,Format.getStrDateTime());
dbc.setString(6,browser);
dbc.setString(7,stats.getBytes("GBK").toString());
System.out.println("tttt"+actCome);
if(actCome==null){
dbc.setString(8,"null");
dbc.setString(10,"null");
}
else{
dbc.setString(8,actCome);
dbc.setString(10,actCome);
}
dbc.setString(9,comeFrom.getBytes("GBK").toString());
dbc.executeUpdate();
dbc.clearParameters();
}
}
catch(Exception e){
if(!onlineSign){
sql="insert into bbs_online (id,username,userclass,ip,startime,lastimebk,browser,stats,actforip,ComeFrom,actCome) values("+statUserID+",?,?,?,?,?,?,?,?,?,?)";
dbc.prepareStatement(sql);
//dbc.setLong(1,statUserID);
dbc.setString(1,"guest");
dbc.setString(2,"客人".getBytes("GBK").toString());
dbc.setString(3,ip.getBytes("GBK").toString());
dbc.setString(4,Format.getDateTime());
dbc.setString(5,Format.getDateTime());
dbc.setString(6,browser);
dbc.setString(7,stats.getBytes("GBK").toString());
dbc.setString(8,actCome);
dbc.setString(9,comeFrom.getBytes("GBK").toString());
dbc.setString(10,actCome);
dbc.executeUpdate();
dbc.clearParameters();
}
else{
sql="update bbs_online set lastimebk=?,lastime=?,ComeFrom=?,actCome=?,stats=? where id="+statUserID;
System.out.println("1"+Format.getDateTime()+"2"+Format.getStrDateTime()+"3"+comeFrom.getBytes("GBK")+"4"+actCome+"5"+stats.getBytes("GBK")+"kill");
dbc.prepareStatement(sql);
dbc.setString(1,Format.getDateTime());
dbc.setString(2,Format.getStrDateTime());
dbc.setString(3,"'"+comeFrom.getBytes("GBK").toString()+"'");
if(actCome==null)
{
dbc.setString(4,"null");
}
else{
dbc.setString(4,actCome);
}
dbc.setString(5,"'"+stats.getBytes("GBK").toString()+"'");
//dbc.setLong(6,statUserID);
dbc.executeUpdate();
dbc.clearParameters();
}
}
}
sql="delete from bbs_online where now()>date_add(lastimebk,interval 20 minute)";
dbc.executeUpdate(sql);
sql="select Maxonline from config";
rs=dbc.executeQuery(sql);
rs.next();
int oldMaxOnLine=rs.getInt(1);
sql="select count(*) from bbs_online";
ResultSet tmprs=dbc.executeQuery(sql);
tmprs.next();
int newMaxOnLine=tmprs.getInt(1);
if(newMaxOnLine>oldMaxOnLine){
sql="update config set Maxonline="+newMaxOnLine+",MaxonlineDate=now()";
dbc.executeUpdate(sql);
ForumPropertiesManager.resetManager();
}
dbc.close();
}
catch(Exception e){
e.printStackTrace();
}
}
flowercat
2003-12-12
打赏
举报
回复
同意楼上的,需要考虑bean的生命周期。也可以考虑用servlet:)推荐
aoenzh
2003-12-12
打赏
举报
回复
session比较好
bluesmile979
2003-12-12
打赏
举报
回复
我觉得用个专门的bean比较好。用户登陆的时候在bean里面添加相应信息,session失效的时候从bean里面删除。想显示在线用户列表的话就直接从bean里面读取。
StevenWSF
2003-12-12
打赏
举报
回复
在 APPLICATION 里建个 用户数组, 每个用户登陆后 将他的信息 保存到SESSION 和 该数组里,
如果SESSION死掉 就在书组 里找到该信息 并删除
yugona
2003-12-12
打赏
举报
回复
用session比较好吧,加个online 你不还是要判断他是否离线了?不是每个用户都会来注销自己的登陆。
加载更多回复(6)
用户
故事地图详解
用户
故事地图就是将story用可视化的方式展现在团队面前,让团队可以仔细梳理、
讨论
,确认这个story包含的内容,最终产出需求进行开发。防止只见树木不见林,更容易看清backlog全貌;确保backlog覆盖了最重要的
用户
...
最近程序员频繁被抓,如何避免面向监狱编程!?
最近,有关程序员因为参与某些项目开发导致被起诉,甚至被判刑的事件发生的比较多: 某程序员因为接了个外包,帮别人写了个...那么,作为
一个
程序员,如何避免这些坑呢?怎样尽可能的保护自己呢? 本文就从爬虫、赌...
150
分
钟学会R语言与R常见问题解答
序: 这篇文档内容的来源多样,既有来自于 R官方文档(包括 R intro,...本文档的目的是为具有一定统计(数学)背景的 R 软件初学者提供
一个
快速认识 R 软件的平 台,如果你无此背景,可能会对其中的若干表达存在疑问
你遇上过 “输出用逗号
分
隔,最后
一个
输出不用逗号“难题吗?follow me !
关于输出用逗号
分
隔,最后
一个
输出不用逗号 的问题 水仙花的输出 for i in range(
100
,
100
0): I=str(i) if pow(eval(I[0]),3)+pow(eval(I[1]),3)+pow(eval(I[2]),3)==i: print(i,",",end="") # print("{}".format...
前端基础知识点-每天
一个
基本知识点(
100
+个前端小知识,你
是否
都知道?)
文章目录前言第一回合一、知识点:cookie(21/09/06)二、知识点:节流和防抖(21/09/07)三、知识点:var和let以及const(21/09/08)四:知识点:深拷贝和浅拷贝(21/09/09)五、知识点:作用域和作用域联(21/09/...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章