社区
Web 开发
帖子详情
[100分讨论] 如何判断一个用户是否在线!?
zhaoqiubo
2003-12-12 09:13:42
在每个用户登录以后我都把他的用户信息放到SESSION中了,如何得到在线用户的列表呢?
...全文
102
27
打赏
收藏
[100分讨论] 如何判断一个用户是否在线!?
在每个用户登录以后我都把他的用户信息放到SESSION中了,如何得到在线用户的列表呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
最近程序员频繁被抓,如何避免面向监狱编程!?
最近,有关程序员因为参与某些项目开发导致被起诉,甚至被判刑的事件发生的比较多: 某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓。 某公司利用爬虫抓取
用户
信息,最后被发现,导致该公司的程序员被抓。 某P2P公司暴雷,老板跑路,程序员被抓。 中科大博士卖“外挂”非法牟利300多万,被警方逮捕。 那么,作为
一个
程序员,如何避免这些坑呢?怎样尽可能的保护自己呢? 本文就从爬虫、赌...
Flutter 什么,微信现在才支持实况图!?
最近微信朋友圈可以发实况图了,上了热搜!我在想,好家伙, 实况图 (Live PhotoiOS 9.1就支持了,现在都iOS 18了。我记得和很早就支持了呀!虽然但是,然后需求它又来了。微信都不支持,不要太卷了,年轻人。Live Photo已同步微信实况图效果。从最开始支持图片的缩放平移,就已经为后续功能铺好路,只要懂得其原理,一切都是水到渠成。最后想说的是,年轻人还是不要太卷了,如果提前做了,今年的kpi又怎么完成呢?微信怎么可以做?和微信都不支持!同理。接下来的kpi和重构整理下代码。
用Python实现 学生考试
分
数的
判断
以及代码的优化 (Python经典编程案例)
案例:输入
一个
分
数。
分
数在 0-
100
之间。90 以上是 A,80 以上是 B,70 以上是 C,60以上是 D。60 以下是 E。 代码如下: score = int(input("请输入
一个
在 0-
100
之间的数字:")) grade = "" if score >
100
or score < 0: score = int(input("输入错误!请重新输入
一个
在 0...
你遇上过 “输出用逗号
分
隔,最后
一个
输出不用逗号“难题吗?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(i),end="") #print(i,end=",") 结果为: 后面有个逗号,这就是今天
讨论
的地方 数据多少
前端基础知识点-每天
一个
基本知识点(
100
+个前端小知识,你
是否
都知道?)
文章目录前言第一回合一、知识点:cookie(21/09/06)二、知识点:节流和防抖(21/09/07)三、知识点:var和let以及const(21/09/08)四:知识点:深拷贝和浅拷贝(21/09/09)五、知识点:作用域和作用域联(21/09/10)六、知识点:从输入URL到页面展示这中间发生了什么(21/09/11)七、知识点:重排(21/09/12)八、知识点:TCP和UDP(21/09/13)九、知识点:三次握手(21/09/15)十、知识点:绝对和相对定位(21/09/16)十一、知识..
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章