日期:2014-05-17  浏览次数:20683 次

asp登录控制问题
假如有一个公用帐号:编号为:AAAAA   密码是:11111

当一个人用AAAAA登录了以后。在他没有退出登录或者session没有失效的情况下。

如果才能不允许别人用此帐号登录。。(不允许别人用AAAAA和11111登录)




------解决方案--------------------
'设置一个帐号只允许同时登录一个,想法是:如果是同一台机器的话,因为已经在admin_login中设置了SESSION变量比较,所以可以直接进入后台;而对于不是同一个地方的,因为后登录者IE中没有这个session变量,所以需要通过登录及权限验证,即要经过本页面,由于检测到标志已设置为1,故会提示不能登录啦,爽!但有个问题就是,如果正在管理中,突然非正常退出,即标志字段不能归零,此时,可通过一个变通的方法来实现,即再附加两个条件:如果IP地址不同,如果两次登录时间小于1小时(因为session有效时间设置为50分钟),呵呵,这样,就变相地解决了这个问题。
elseif rs( "login_flag ")=1 and DateDiff( "h ",rs( "last_time "),now()) <1 and Request.ServerVariables( "REMOTE_ADDR ") <> rs( "last_ip ") then
rs.close
set rs=nothing
founderr=true
errmsg=errmsg+ " <br> "+ " <li> 对不起,帐号已在激活使用中…… "
------解决方案--------------------
假如有一个公用帐号:编号为:AAAAA 密码是:11111

当一个人用AAAAA登录了以后。在他没有退出登录或者session没有失效的情况下。

如果才能不允许别人用此帐号登录。。(不允许别人用AAAAA和11111登录)
-----------------------------------------------
如果第一个登录的人不退出,其他人就不能登录了?如果他自己登录了,但没有退出,然后跑到其他地方登录,他自己也不能登录么?这个商务逻辑是不对的。

想想这个问题QQ是如何处理的,一台计算机登录了QQ,如果其他地方再登录,第一台登录QQ的计算机就会被挤下去,因为用户名和密码是唯一权限标识,你不能不让有用户名密码的人登录。

思路:
建立一个登录表,用户成功登录后,存储其SessionId(或其他唯一标识),并将此唯一标识存储在Session中。
这是,第二个用户用同样的用户名密码登录了,检测登录表如何用同样用户名密码的记录,就更新这条记录的唯一标识。
第一个用户此时再进行操作,检测其Session中的唯一标识是否与数据库表中相同,由于第二个用户登录时更新过这个唯一标识,所以现在肯定不一样了,这是清除掉第一个用户的Session,并提示该用户名已经在其他地方登录了。