我的做法是建立Online表来存放用户的在线情况。
在用户登陆的时候判断Online表中是否存在相应记录,如果存在且IP与当前IP不同,则提示“用户已登陆”,否则在Online表中增加该用户信息(包括当前IP)。
为了判断用户是否超时登陆,在程序页面中增加一个隐藏的iframe,该页面1分钟刷新一次,每次用getdate()刷新Online表中的活动时间字段。
用户退出登陆时删除Online表中相应记录,为了避免用户关闭浏览器导致信息残留,服务器要配置一个SQL作业来清理超时登陆的用户。每次将活动时间在当前时间5分钟以前的记录删除。我配置的脚本如下:
delete Online where User_Action_Time