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

相关内容推荐

获得当前页面地址和来路地址

当前页面地址: html="http://" html=htmlRequest.ServerVariables("Server_Name") html=htmlRequest.ServerVariables("URL") ifrequest.ServerVariables("QUERY_STRING")""then html=html"?"Request.ServerVariables("QUERY_STRING") endif session("

实现多条件模糊查询SQL语句

很多网友问到如何写模糊查询语句和多条件查询,这里我整理了一下,假设以姓名、性别、电话号...作为数据库中的字段名。 通常写一个简单的模糊查询的SQL语句格式可以如下例: sq

html中用js调用ASP文件,实现静态页面动态显示

html中用js调用ASP文件,实现静态页面动态显示,比如HMTL文章的动态新闻评论等 ---简单版[调用代码,把他放哪儿,就在哪儿显示]-------- script language="javascript" src="asdf.asp"/script-----asdf.asp文

用ASP生成Excel文件

用asp生成Excel文件不是像我认为的那么容易。我想这小段代码应该能帮助大家找到输出数据到csv和xls的方法。 %@LANGUAGE="VBSCRIPT" CODEPAGE="936"%meta http-equiv="Content-Type" content="text/html; charset=

怎样用ASP压缩文件

多数的时候我们需要压缩文件,保存到特定的位置,或者你可以使用它实现所有你想要的效果。 我们需要服务器支持WScript.Shell-多数的站长都不会允许这样的。 这里你可以获取下载链接

返回
顶部