aspASP限制同一用户名同时两个人登陆的方法(讨论)
发布时间:2017/5/3 23:41:41 / 浏览:709
在用ASP给客户做一个OA办公系统时,客户要求每个管理员帐号只能允许一个人登陆,当有多人使用同一个帐号登陆时,就提示非法登陆或帐号被盗用的信息。
想了几套方案,比如新建一个用户在线表,限制同一个帐号不能同时在线。
但一旦用户不按正常方法退出,在线列表将不能正确更新,同一用户想在二次登陆时就不允许了。
最后想到了一个最简单的解决办法,那就是采用随机码机制,在用户登陆时,把登陆时的随机码写入用户数据库字段truepass和写入session,然后进行后台每页操作时判断用户名和写入session里的随机码是否匹配,如果不匹配,证明有另一个人使用了该同名用户进行登陆,并刷新了用户表的随机码,导致验证无法通过。
这个方法是不是很简单和实用呢:)
其实楼主可以用一个表(上线用户表)来完成,就是用户登录时,用这个表来记录,哪些用户登录,退出时,可以取消。这里要做的就是在写一个文件,让每一个页面都调用它,用来记录用户的最后的活动时间。和判断在上线用户表里是否有这个用户。
这样就好办多了。如果一个用用户登录了,哪么这个表里就有它的信息,如果另一个用户再用这个用户名登录的话,哪么就会提示它已经登录。
这里有一个问题就是当用户没有点退出,这样就让每一个新用户登录时,判断一下表里用户的最后活动时间与当前时间相比,如果大与20分钟就删除就完了。
在数据库中保存一下登陆记录,每个用户最多记五条.同时也保存活动时间,每次访问页面刷新一下活动时间,设定超时时间,假如有一个时间超时,从数据库中删除.
偶个人感觉没有个完好的解决办法
主要是关闭浏览器或非法关机(重启)之类得不到好的解决,有人说如果叉掉ie的关闭按钮,在事件onbeforeunload中向服务器发出请求来更改登陆信息,这样是可以解决,但用户登陆后可能开了好几个窗口,关掉一个,其他就用不了.
非法关机没办法解决的
关注,继续看讨论...
___________________________________________________________________
加一张Online表 用来记录当前在线的用户,用XMLHTTP割30秒刷新一次最后在线时间,使其等于当前服务器时间
——————————————————————————————
这已经解决了关闭浏览器与非正常退出的问题了