ASP防止同时登陆的问题
来源:百度文库 编辑:神马文学网 时间:2024/04/27 23:35:56
实现这个功能可有两种方式:
1。application
用application对象:如果做的是大型社区,可能要为每个登陆id生成一个appliaction,这样做虽然程序上设计会简单些但登陆用户过多及其耗费服务器资源,这里决不提倡,因为appliaction对象在用户登陆时生成很容易, 但是要做到真正的随着用户退出系统完全释放,到目前还没看到更好的方法~
<%
.....取用户名username.....
if Application(username)<>"" then
response.write "该用户已经登录"
response.end
end if
Application(username)=username ’’存入该用户的用户名
%>
在global文件中加上session onend事件,下线时Application("isuserlogin")=false
此外还要检测是否吊线,有专门的办法,是server对象里的某项
(参: http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=815)
2。数据库+asp
做起来可能会复杂些,但是适合有大量登陆用户的系统。
首先为用户建立数据库-用access新建一个onlyTOL8.mdb
数据表1: users 存放用户注册资料
下设数据表:uID(自动编号) userName(字符型) userPass(字符型)
数据表2: onlyLogin 存放用户临时登陆信息
下设数据表: OLname(字符型) OLtime(日期型) OLip(字符型)
数据库建好后直接向users表中手动添加数据 userName表添加TOL8,userPass表里添加111,
下面来做用户登陆界面,复制下面代码存成onlyLogin.asp文件。
禁止同一账号不同地区同时登陆
完成后在新建一个loginCONN.asp文件复制下面的代码保存用于连接数据库
<%
Dim CONN_TOL8
Dim Conn_T
Dim mmdd
mmdd="onlyTOL8.mdb"
Set CONN_TOL8 = Server.CreateObject("ADODB.Connection")
Conn_T="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&mmdd&"")
on error resume next
CONN_TOL8.Open Conn_T %>
下面做一个loginPost.asp文件也存在这个目录下,这是关键,仔细看下面的代码:
<%
’’删除maxTime时间内部活动的用户,maxTime 在loginCONN.asp文件里面已经定义好了
Conn_TOL8.Execute("Delete From onlyLogin where DATEDIFF(’’s’’,OLtime, now()) > "& maxTime & "")
’’================================================================
Dim rs, ts, txt, sql, userName, userPass
if Request.Form("Submit")="Login" then
userName=Request.Form("userName")’’获取表单用户登陆名
userPass=Request.Form("userPass")’’获取表单用户登陆密码
’’由于我们这里讨论的不是安全问题所以用户密码都没有加密
Set rs = Server.CreateObject("ADODB.RECORDSET")
sql="SELECT * FROM users where userName = ’’ "& userName & "’’ and userPass = ’’ "& userPass & "’’"
rs.Open sql, CONN_TOL8,1,1
IF not rs.eof then
Call isOK(userName) ’’ 用户名密码正确调用次过程,isOK将会在下面的程序中定制。
else
Response.Write("用户名或密码错误")
Response.End()
end if
rs.Close
Set rs=Nothing
end if
Sub isOK(userName)
Dim Olip ’’ 数据库中当前登陆用户名保存的ip
Dim Oltime ’’ 数据库中当前登陆用户名保存的最后刷新网页的时间,是计算用户是否在线的重要数据。
Dim OLip1 ’’ 记录当前用户登陆ip,用来区分是否为同一用户的标示
OLip1=Request.ServerVariables("REMOTE_ADDR")’’取得提交登陆信息用户的IP
Set ts=Conn_TOL8.execute("Select * FROM onlyLogin WHERE OLname=’’"& userName & "’’")
if not ts.eof then ’’ 查询数据库是否有此用户的登陆过的信息
OLtime=ts("OLtime")
OLip=ts("OLip")
if OLip1<>OLip and DateDiff("s",OLtime,now()) < maxTime then
’’上句判断如果提交登陆用户ip不是数据库中最后纪录的用户ip并且
’’用户的最后活动时间和当前时间相隔并没超过规定的秒数则确认此用户当前在线
Response.Write "此用户目前在线,你无法从其他地方登陆此账号!"
Response.End()
else
’’否则的话判定登陆成功付值给session
Session("lgName")=userName
Session("lgPass")=userPass
Response.Redirect "loginOK.asp"
Response.End
end if
else
’’如果数据库没有次登陆用户纪录则执行下面的语句
Dim ls
Set ls=Server.CreateObject("ADODB.RECORDSET")
ls.Open"Select * From onlyLogin",CONN_TOL8,2,2
ls.ADDNEW
ls("OLname")=userName
ls("OLip")=OLip1
ls("OLtime")=NOW()
ls.UPDATE
ls.Close
Set ls=Nothing
’’判定登陆成功付值给session
Session("lgName")=userName
Session("lgPass")=userPass
Response.Redirect "loginOK.asp"
Response.End
end if
End Sub %>
登陆成功后叶面会跳转到loginOK.asp
<% IF Session("lgName")<>"" then %>
您登陆成功了!!!下面是潜入网页内的iframe为的是在规定的时间刷新网页向服务器报告你是否在线
为了便于区分,frame网页我们采用了白色作为底色
<% else %>
您没有登陆哈
<% end if %>
下面要做的是loginFrame.asp
<% CONN_TOL8.Execute("Update onlyLogin Set OLtime=’’"& NOW() & "’’ where OLname = ’’ "& Session("lgName") & "’’") %>
; url="">
到此为止程序就完成了,这个程序的关键就是判定用户是否在线
1。application
用application对象:如果做的是大型社区,可能要为每个登陆id生成一个appliaction,这样做虽然程序上设计会简单些但登陆用户过多及其耗费服务器资源,这里决不提倡,因为appliaction对象在用户登陆时生成很容易, 但是要做到真正的随着用户退出系统完全释放,到目前还没看到更好的方法~
<%
.....取用户名username.....
if Application(username)<>"" then
response.write "该用户已经登录"
response.end
end if
Application(username)=username ’’存入该用户的用户名
%>
在global文件中加上session onend事件,下线时Application("isuserlogin")=false
此外还要检测是否吊线,有专门的办法,是server对象里的某项
(参: http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=815)
2。数据库+asp
做起来可能会复杂些,但是适合有大量登陆用户的系统。
首先为用户建立数据库-用access新建一个onlyTOL8.mdb
数据表1: users 存放用户注册资料
下设数据表:uID(自动编号) userName(字符型) userPass(字符型)
数据表2: onlyLogin 存放用户临时登陆信息
下设数据表: OLname(字符型) OLtime(日期型) OLip(字符型)
数据库建好后直接向users表中手动添加数据 userName表添加TOL8,userPass表里添加111,
下面来做用户登陆界面,复制下面代码存成onlyLogin.asp文件。
完成后在新建一个loginCONN.asp文件复制下面的代码保存用于连接数据库
<%
Dim CONN_TOL8
Dim Conn_T
Dim mmdd
mmdd="onlyTOL8.mdb"
Set CONN_TOL8 = Server.CreateObject("ADODB.Connection")
Conn_T="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&mmdd&"")
on error resume next
CONN_TOL8.Open Conn_T %>
下面做一个loginPost.asp文件也存在这个目录下,这是关键,仔细看下面的代码:
<%
’’删除maxTime时间内部活动的用户,maxTime 在loginCONN.asp文件里面已经定义好了
Conn_TOL8.Execute("Delete From onlyLogin where DATEDIFF(’’s’’,OLtime, now()) > "& maxTime & "")
’’================================================================
Dim rs, ts, txt, sql, userName, userPass
if Request.Form("Submit")="Login" then
userName=Request.Form("userName")’’获取表单用户登陆名
userPass=Request.Form("userPass")’’获取表单用户登陆密码
’’由于我们这里讨论的不是安全问题所以用户密码都没有加密
Set rs = Server.CreateObject("ADODB.RECORDSET")
sql="SELECT * FROM users where userName = ’’ "& userName & "’’ and userPass = ’’ "& userPass & "’’"
rs.Open sql, CONN_TOL8,1,1
IF not rs.eof then
Call isOK(userName) ’’ 用户名密码正确调用次过程,isOK将会在下面的程序中定制。
else
Response.Write("用户名或密码错误")
Response.End()
end if
rs.Close
Set rs=Nothing
end if
Sub isOK(userName)
Dim Olip ’’ 数据库中当前登陆用户名保存的ip
Dim Oltime ’’ 数据库中当前登陆用户名保存的最后刷新网页的时间,是计算用户是否在线的重要数据。
Dim OLip1 ’’ 记录当前用户登陆ip,用来区分是否为同一用户的标示
OLip1=Request.ServerVariables("REMOTE_ADDR")’’取得提交登陆信息用户的IP
Set ts=Conn_TOL8.execute("Select * FROM onlyLogin WHERE OLname=’’"& userName & "’’")
if not ts.eof then ’’ 查询数据库是否有此用户的登陆过的信息
OLtime=ts("OLtime")
OLip=ts("OLip")
if OLip1<>OLip and DateDiff("s",OLtime,now()) < maxTime then
’’上句判断如果提交登陆用户ip不是数据库中最后纪录的用户ip并且
’’用户的最后活动时间和当前时间相隔并没超过规定的秒数则确认此用户当前在线
Response.Write "此用户目前在线,你无法从其他地方登陆此账号!"
Response.End()
else
’’否则的话判定登陆成功付值给session
Session("lgName")=userName
Session("lgPass")=userPass
Response.Redirect "loginOK.asp"
Response.End
end if
else
’’如果数据库没有次登陆用户纪录则执行下面的语句
Dim ls
Set ls=Server.CreateObject("ADODB.RECORDSET")
ls.Open"Select * From onlyLogin",CONN_TOL8,2,2
ls.ADDNEW
ls("OLname")=userName
ls("OLip")=OLip1
ls("OLtime")=NOW()
ls.UPDATE
ls.Close
Set ls=Nothing
’’判定登陆成功付值给session
Session("lgName")=userName
Session("lgPass")=userPass
Response.Redirect "loginOK.asp"
Response.End
end if
End Sub %>
登陆成功后叶面会跳转到loginOK.asp
<% IF Session("lgName")<>"" then %>
您登陆成功了!!!下面是潜入网页内的iframe为的是在规定的时间刷新网页向服务器报告你是否在线
为了便于区分,frame网页我们采用了白色作为底色
<% else %>
您没有登陆哈
<% end if %>
下面要做的是loginFrame.asp
<% CONN_TOL8.Execute("Update onlyLogin Set OLtime=’’"& NOW() & "’’ where OLname = ’’ "& Session("lgName") & "’’") %>
; url="">
到此为止程序就完成了,这个程序的关键就是判定用户是否在线
asp防止同时登陆的问题
ASP防止同时登陆的问题
asp制作用户登陆界面--
防止孩子登陆不健康网站
asp制作用户登陆界面--龙二
asp.net 2.0 防止密码框被清空的解决方案 - cnkiminzhuhu的专栏 -...
因留学和单位解除合同时的一些问题
初学ASP编程易犯的致命问题及解决办法
ASP.NET应用中十大常见的潜在问题
关于初学ASP.NET技术的学习顺序问题
javascript和ActiveX的交互问题 .NET技术 / ASP.NET
关于初学ASP.NET技术的学习顺序问题
对防止干部“带病提拔”问题的思考?(ZT)
节日网上方便购物同时如何防止电邮诈骗
如何防止ASP木马在服务器上运行?
赵汉雄:登陆的鱼
赵汉雄:登陆的鱼
单一登陆(Single Sign-on)问题
前置音频线的接法(解决很多网友提出的前后同时有声的问题)
ASP Utf-8和Gb2312乱码问题的终结--痞子的窝
在Vista的IIS系统中运行ASP的几个配置问题
解决双网卡机器同时访问内外网的问题--计算机文谷--实用技巧
中性点不接地系统中两条出线同时单相接地问题的浅探
古老而永远都棘手的问题:如果老婆和妈妈同时掉到水里,你会救谁?