现在的位置: 首页 > 综合 > 正文

在线管理

2013年02月01日 ⁄ 综合 ⁄ 共 1300字 ⁄ 字号 评论关闭
前些天写了一个在线管理的页面.主要功能是监视当前有哪些用户什么时候用哪个帐号哪个IP地址登入系统,目前使用了系统多少资源,正在访问哪个页面等信息.另外通过它还可以给某些用户发送实时消息,可以将其踢出系统从而强迫其重新登陆,可以锁定其帐号,IP地址.从而禁止此用户或此IP地址登入系统.还可以锁定服务器,这样除操作者外的所有用户都将被强迫退出,并禁止新用户登录.由于这个页面的代码牵涉到我以前写的一些类,因而这里不方便贴出来(贴出来也没用,你也没法调试,呵呵).下面说说具体原理.
    关于监视在线用户这个不难实现,只要用户登陆时记录下来他的信息就行了.可以写入数据库或者记忆到内存中.由于我自己写了一个类似Session并具有ViewState功能的缓存类,所有我用它将用户信息保存在内存中.对于用户很多的情况不推荐这样,可以将其存入数据库,或者增加一个机器专门缓存相关数据,保存用户的临时数据,SQL结果集,动态页面等.然后在此页面中将这些信息读出即可.可以利用Ajax动态的刷新这些信息(建议刷新周期大于5s,否则容易卡).
    发送实时消息这个有点麻烦.原理很简单:发送时将信息保存下来,然后用户自己读取.我是用邮箱的方式实现的.我的缓存类为每个用户保留了一个邮箱,也就是一个动态链表.发消息时系统将此消息放入收消息人的邮箱中即可.收信人会周期性(建议刷新周期大于3s)的检查自己的邮箱中是否有邮件,有的话则读出然后删除.我在实现时是采用Ajax让每个用户都周期性的检查自己的邮件.
    踢出用户原理也很简单,其实也用到了上面的实时消息.踢出某个用户时系统会给用户发给消息,提示其退出.至于用户什么时候被踢出有几种方法.一种是在发送消息时就踢出.一种是用户收到消息后踢出,还有一种是收到消息时踢出.第一种方式最安全.但是会出现问题:在系统发送消息后到用户接收消息前用户的操作都将被认为是非法的,这样务必会让用户觉得郁闷.好处也是显而易见的,绝对安全,因为在用户不知情的情况下他就被踢出了,消息只是告诉你,你完了.第二种方法是让用户收到消息后,再由用户页面(其实都是一个页面,只是访问者不同而已)自己去退出系统.这样很人性化,但是不安全.一些不良用户可能根本不管你的消息,重新打开一个链接操作.笔者最终使用了第三种方案.就是在用户收到消息时踢出用户.就是说当系统检索到有当前登陆者的邮箱时一方面告诉前台用户的邮件内容,同时就将用户踢出.这样几乎在用户看到消息的同时,他就被踢出了.
    锁定用户、锁定IP、锁定服务器的实现方式类似.锁定用户时给用户发送踢出消息,同时将其用户名保存到缓存类的系统帐号上;锁定IP将用户IP地址保存起来;锁定服务器置系统锁定标识为真.登陆时只要检索这些信息即可.一旦发现非授权访问就立即终止.
    解锁则更假,直接将相关的锁定记录删除即可.
    呵呵,罗嗦了这么多,可能对您一点用没有.做这个也不属于客户需求范围,仅仅为了好玩而已.但是现在感觉还是有点用的,比如说有事通知当前用户可以给他(们)发送条消息.维护时可以群发维护消息,然后锁定系统,干净利落.

抱歉!评论已关闭.