开发一个OA,要求有实时的显示出当前在线的用户。我的方法是用户登录时在数据库中设一个标志,退出时再把标志去掉。但如果用户的机器死机或关闭浏览器怎么办呢?
大家有成熟的方案还请不吝赐教!
你可以去看看动网的代码嘛.
下一个动网基本上什么代码都有了,呵呵.懒.
但如果用户的机器死机或关闭浏览器,要解决这个问题,就要设置用户在线停留的最短时间,超过了这段时间用户没有任何操作,就做用户离线处理。
写在Session_OnEnd里面,但是也不是很准确,因为session有一个过期的时间
但如果用户的机器死机或关闭浏览器,要解决这个问题,就要设置用户在线停留的最短时间,超过了这段时间用户没有任何操作,就做用户离线处理。-----> 完全同意
呵呵,好像已经有无数个帖子在讨论这个问题了
不过都没有很好的方法
如果你的服务器能承受的起的话,可以用楼上的方法
不过时间定为多久就看你了
用session加数据库 查看一下别人的源代码
在globle.asa中做一个变量online每开启一个进程online+1,关闭一个online-1,在页面显示online 的值。
我在OA中是这么作的
在数据库中用个online表来记录
CREATE TABLE [online] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Username] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[IP] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Stats] [smallint] NOT NULL CONSTRAINT [DF_online_Stats] DEFAULT (0),
[startime] [datetime] NOT NULL ,
[lastimebk] [datetime] NOT NULL ,
[lastime] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[browser] [nvarchar] (250) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
kicktime是记录的时间
sql="Delete FROM online WHERE DATEDIFF(s, lastimebk, GETDATE()) > "&kicktime&"*60"