欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何限制同一用户名同时登陆

程序员文章站 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