ASP防止同时登陆的问题

实现这个功能可有两种方式:

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文件。


以下为引用的内容:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>禁止同一账号不同地区同时登陆</title>
</head>
<body>
<form name="form1" method="post" action="loginPost.asp">
用户名:<input name="userName" type="text" id="userName" size="15" maxlength="5">
密码:<input name="userPass" type="password" id="userPass" size="15" maxlength="15">
<input type="submit" name="Submit" value="Login">
</form>
</body>
</html>

完成后在新建一个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文件也存在这个目录下,这是关键,仔细看下面的代码:


以下为引用的内容:

<!--#include file="loginCONN.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("<a href=javascript:history.go(-1)>用户名或密码错误</a>")
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 "<a href=javascript:history.go(-1)>此用户目前在线,你无法从其他地方登陆此账号!</a>"
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


以下为引用的内容:

<style type="text/css">
<!--
body {background-color: #FF9900;}
-->
</style>
<% IF Session("lgName")<>"" then %>
您登陆成功了!!!下面是潜入网页内的iframe为的是在规定的时间刷新网页向服务器报告你是否在线
为了便于区分,frame网页我们采用了白色作为底色
<iframe border=0 name=new_date marginwidth=0 framespacing=0 marginheight=0 src="loginFrame.asp"
frameborder=0 noResize width=100 scrolling=no height=30 vspale="0"></iframe>
<% else %>

您没有登陆哈


以下为引用的内容:

<% end if %>

下面要做的是loginFrame.asp


以下为引用的内容:

<!--#include file="loginCONN.ASP" -->
<% CONN_TOL8.Execute("Update onlyLogin Set OLtime=''"& NOW() & "'' where OLname = '' "& Session("lgName") & "''") %>
<html><head><meta http-equiv="refresh" content="<%=(maxTime-5)%>; url=""></head></html>

到此为止程序就完成了,这个程序的关键就是判定用户是否在线。

时间: 2024-10-23 09:45:11

ASP防止同时登陆的问题的相关文章

asp.net的登陆控件有用吗?

问题描述 asp.net的登陆控件有用吗?登陆控件用得多吗? 解决方案 解决方案二:看你具体的项目需求.解决方案三:看你怎么用了当然有用的解决方案四:要求不高的完全可以用,关键是开发速度快

asp.net (C#)登陆用户名和密码验证,用dr.Read()方法会出现大小写不区分!!(例如:我注册了大写账号,用小写账号也可以登陆).求各位大神帮我解答

问题描述 asp.net(C#)登陆用户名和密码验证,用dr.Read()方法会出现大小写不区分!!(例如:我注册了大写账号,用小写账号也可以登陆).求各位大神帮我解答!! 解决方案 解决方案二:你的代码贴出来解决方案三:SQLServer数据库??如果是,那应该不是asp.net(C#)的原因,是数据库的原因,SQLServer不区分大小写.解决方案四:谁知道你是什么方法做的验证呀解决方案五:mssql可以配置是否区分大小写,这不是c#的问题解决方案六:这里只用dr.Read()方法验证判断了

[ASP技术]asp防止同时登陆的问题

问题 实现这个功能可有两种方式: 1.application 用application对象:如果做的是大型社区,可能要为每个登陆id生成一个appliaction,这样做虽然程序上设计会简单些但登陆用户过多及其耗费服务器资源,这里决不提倡,因为appliaction对象在用户登陆时生成很容易, 但是要做到真正的随着用户退出系统完全释放,到目前还没看到更好的方法~ <%  .....取用户名username.....  if  Application(username)<>"&q

asp代码-注册登陆代码

数据库位置:data/data.mdb 数据库表:user id name pwd wenti daan conn.asp <%db="data/data.mdb" '数据库存放目录on error resume nextset conn=server.createobject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq="&s

Asp.net 程序登陆 Active Directory 出错

问题描述 我做了一段登陆公司域的程序,但出先了很难找的错误,在VS2005里开发环境下可以登陆域帐户,但一旦生成网站,并把网站发布出去,就无法登陆域帐户了,开发和发布后都是在同一台机器上,是已经加入域的机器.返回错误信息是Errorauthenticatinguser.指定的域不存在,或无法联系.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.Exception:Errorauthenticati

asp.net首页登陆图片设计,切割后的图片不能完整显示,有裂缝

问题描述 在设计首页图片时候,先用photoshop将图片切割,生成html文件.之后导入Dreamweaver中,再将生成的代码复制到asp.net中,做适当的修改,生成首页登陆图片.但是生成的图片之间有裂缝,已经做过适当调整,还是对不齐...这是为什么该怎么改?谢谢! 解决方案 解决方案二:http://topic.csdn.net/u/20080731/10/d700bd4b-4f6c-4686-aa1f-fbeebd912e82.html解决方案三:先谢谢楼上的我接下来还有问题:当没添加

ASP网站后登陆需不需SQL SERVER支持哦!

问题描述 登陆到网站后台,没有安装数据库,总是提示验证码错误. 解决方案 解决方案二:你的问题好无厘头啊...登录网站后台..没装数据库..验证码错误...晕了..验证码跟数据库没关系.你没数据库后台账户密码怎么存的?直接验证uid=admin,pwd=123?.解决方案三:要不要不是由你自己决定的吗.自己的需求都不明确啊?解决方案四:引用1楼ptyzhu的回复: 你的问题好无厘头啊...登录网站后台..没装数据库..验证码错误...晕了..验证码跟数据库没关系.你没数据库后台账户密码怎么存的?

Dreamweaver MX 2004做ASP程序(5)登陆系统的实现

dreamweaver|程序 1.在站点里右键新建一文件login.asp用来做登录页面:同样,之前已经建了和数据库连接的文件conn.asp.所以在面板里"应用程序"----"数据库"标签里面就自动有了"conn". 2.和注册页面一样,都需要到"应用程序"面板的"绑定"标签下"+"记录集.弹出窗口中选择完毕后点击"测试",可以看到当前数据库中满足SQL条件的相关记

ASP.NET2.0登陆控件的使用(常见的三种方法)

asp.net|控件   这里以CreateUserWizard 为例说明注册用户向导的常规使用1)使用默认的向导控件功能  默认的注册向导的使用向导的简单,简单到如下只要一句话代码的地步:  <asp:CreateUserWizard ID="CreateUserWizardControl" runat="server"/>无需要额外的代码就能够完成用户的注册,将注册的信息写入ASPNETDB.MDF数据库. 2)使用默认ID  一些不安分的用户开始不