前言:
在网页开发中,做登陆逻辑处理时,很多新人(包括我,呵呵)都没有对一个用户重复登陆来编写代码进行处理!.
试想一个用户登陆后,其他人还可以用这个用户名登陆,那么注册新的用户就没什么必要了,而且也不利于管理员管理!.
以下是我以前做的两个代码,关于重复登陆的,希望大家能够一起思考和指出我的思维遗漏!.
思路:
要想阻止用户重复登陆,必须要保证连接到服务器上的这个用户始终只有一个,所以当用户进行合法登陆后,服务器需始终确认只有这个用户在线!我们可以在第一个用户登陆后,给他赋个代表他什么时候登陆的值,这个值可以存在数据库,xml(不安全),和application对象中,因为这个值提供的信息是要给所有用户一个指示,"这个用户什么时候登陆了,在这段期间你不能再以这个用户身份登陆",所以不能存在session对象里,然后我们要确保存在这个application对象的值的所有者是谁,就是是谁什么时候登陆了,所以我们要以用户名来作标识.所以确定的是登陆信息以application(userName)的形式来存取!.
--- 即登陆成功后!一般都是查询用户名和密码是否与数据库中的匹配
1.提示已登陆式
if Application(session("UserName"))="" then '-当这个值为空,证明用户没有登陆
Session("UserName")=UserName
Application(session("UserName"))=now() '-存取这个用户的登陆时间
Session("Time")=now() '-存取这个用户最后一次操作的时间
Response.Redirect("index.asp") '-在他登陆后要操作的每个页面都更新它的最后一次操作时间Session("Time")和这个用
'-- 户还在登陆的时间,Application(session("UserName"))
else '-说明这个用户已经登陆过了
if DateDiff("n",Application(session("UserName")),now())>=5 then '-当他5分钟以上没有任何操作,则让另外一个以这个用户身份的人登陆
Session("UserName")=UserName
Application(session("UserName"))=now() '-存取这个用户的登陆时间
Session("Time")=now() '-存取这个用户最后一次操作的时间
Response.Redirect("index.asp")
else '-当这个用户离上次操作时间还在5分钟之类,认为他是在线状态,报错
response.Write "<script LANGUAGE='javascript'>alert('该用户已经存在,请稍后再登陆!');parent.location='index.asp';</script>"
response.End()
end if
end if
这只是登陆时要处理的代码,关键是在所有页面都要更新Application(session("UserName"))和Session("Time")
缺点:当一个用户登陆后,不做任何操作或立即退出,其他用户将在5分内不能再以这个用户身份登陆!
2.挤人式
大家都知道当你的QQ号码被别人在另外的地点登陆后,你就会被迫下线,这种就是我所说的挤人式,后登陆的挤掉前面登陆的,真是"长江后浪推前浪,前浪死在沙滩上".
'-当用户填写的用户名和密码匹配数据库中,给他加上登陆标识
Session("UserName")=UserName
Application(session("UserName"))=now()
Session("Time")=now()
Response.Redirect("index.asp")
'-这种方法的关键是在所有页面加上检测代码:
if session("UserName")="" then
call CusRes("服务器超时,请重新登陆!","parent.location.href='login.asp';")
end if
if Application(session("UserName"))<>session("Time") then
Call CusRes("您的帐号已经被迫在另外一处登陆,请立即找回您的密码!","parent.location.href='login.asp';")
end if
大家如果还有什么其他的方法,或发现以上代码有哪些漏洞,可以直接留言给我!.转载请注明出处:always there' Blog.