如何限制同一用户名同时登陆
程序员文章站
2022-05-18 14:18:56
这个问题我的办法是,用户有个活跃时间间隔问题。超过这个活跃时间间隔的则可以认为是离线,后者可以登陆 ,如果无后者登陆,但并不是说前者就需要重新登陆了。因为他的session...
这个问题我的办法是,用户有个活跃时间间隔问题。超过这个活跃时间间隔的则可以认为是离线,后者可以登陆 ,如果无后者登陆,但并不是说前者就需要重新登陆了。因为他的session还在的。只能是这个时间设置的越小越精确,也是不能做到绝对的。
代码贴出来给楼主参考下。
代码贴出来给楼主参考下。
function checkonline() dim ip,rsprv,sql,prvdbstate prvdbstate = false if dbstate = false then dbopen() prvdbstate = true end if set rsprv=server.createobject("adodb.recordset") if session("username") = "" then sql="select * from [online] where sessionid='"& session.sessionid &"'" rsprv.open sql,conn,1,3 if rsprv.eof then rsprv.addnew rsprv("sessionid") = session.sessionid rsprv("groupchargelv") = -1 rsprv("lastacttime") = now() rsprv("userip") = getip rsprv("onlinetime") = 0 rsprv("userwhere") = request.servervariables("http_referer") else rsprv("userwhere") = request.servervariables("http_referer") rsprv("onlinetime") = rsprv("onlinetime") + datediff("n",rsprv("lastacttime"),now()) rsprv("lastacttime") = now() end if rsprv.update rsprv.close() 'response.write "notlogin" else 'response.write "logined" sql="select * from [online] where username='"& session("username") &"'" rsprv.open sql,conn,1,3 if rsprv.eof then rsprv.addnew rsprv("sessionid") = session.sessionid rsprv("username") = session("username") rsprv("groupchargelv") = session("groupchargelv") rsprv("lastacttime") = now() rsprv("onlinetime") = 0 rsprv("userip")= getip rsprv("userwhere") = request.servervariables("http_referer") else if rsprv("sessionid") <> session.sessionid and application("loginset")(1) = false then infoto "loginout.asp","该帐户已在其他地方登陆,网站设置1个id只能有1个登陆\n你可以稍候尝试登陆。" response.end() end if rsprv("userwhere") = request.servervariables("http_referer") rsprv("onlinetime") = rsprv("onlinetime") + datediff("n",rsprv("lastacttime"),now()) rsprv("lastacttime")=now() end if rsprv.update rsprv.close() end if set rsprv = nothing if datediff("s",application("onlinelastdelete"),now()) > int(application("deleteonlinediff")) then application.lock() application("onlinelastdelete") = now application.unlock() conn.execute("delete from [online] where datediff('s',lastacttime,now())>"& int(application("checkonlinediff") &"")) '删除x秒没有活动的访客 end if if prvdbstate = true then dbclose() end function