實(shí)現這個(gè)功能可有兩種方式:
1。application
用application對象:如果做的是大型社區,可能要為每個(gè)登陸id生成一個(gè)appliaction,這樣做雖然程序上設計會(huì )簡(jiǎn)單些但登陸用戶(hù)過(guò)多及其耗費服務(wù)器資源,這里決不提倡,因為appliaction對象在用戶(hù)登陸時(shí)生成很容易, 但是要做到真正的隨著(zhù)用戶(hù)退出系統完全釋放,到目前還沒(méi)看到更好的方法~
<%
.....取用戶(hù)名username.....
if Application(username)<>"" then
response.write "該用戶(hù)已經(jīng)登錄"
response.end
end if
Application(username)=username ‘存入該用戶(hù)的用戶(hù)名
%>
在global文件中加上session onend事件,下線(xiàn)時(shí)Application("isuserlogin")=false
此外還要檢測是否吊線(xiàn),有專(zhuān)門(mén)的辦法,是server對象里的某項
2。數據庫+asp
做起來(lái)可能會(huì )復雜些,但是適合有大量登陸用戶(hù)的系統。
首先為用戶(hù)建立數據庫-用access新建一個(gè)onlyTOL8.mdb
數據表1: users 存放用戶(hù)注冊資料
下設數據表:uID(自動(dòng)編號) userName(字符型) userPass(字符型)
數據表2: onlyLogin 存放用戶(hù)臨時(shí)登陸信息
下設數據表: OLname(字符型) OLtime(日期型) OLip(字符型)
數據庫建好后直接向users表中手動(dòng)添加數據 userName表添加TOL8,userPass表里添加111,
下面來(lái)做用戶(hù)登陸界面,復制下面代碼存成onlyLogin.asp文件。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>禁止同一賬號不同地區同時(shí)登陸</title>
</head>
<body>
<form name="form1" method="post" action="loginPost.asp">
用戶(hù)名:<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>
完成后在新建一個(gè)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 %>
下面做一個(gè)loginPost.asp文件也存在這個(gè)目錄下,這是關(guān)鍵,仔細看下面的代碼:
<!--#include file="loginCONN.asp" -->
<%
‘刪除maxTime時(shí)間內部活動(dòng)的用戶(hù),maxTime 在loginCONN.asp文件里面已經(jīng)定義好了
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")‘獲取表單用戶(hù)登陸名
userPass=Request.Form("userPass")‘獲取表單用戶(hù)登陸密碼
‘由于我們這里討論的不是安全問(wèn)題所以用戶(hù)密碼都沒(méi)有加密
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) ‘ 用戶(hù)名密碼正確調用次過(guò)程,isOK將會(huì )在下面的程序中定制。
else
Response.Write("<a href=javascript:history.go(-1)>用戶(hù)名或密碼錯誤</a>")
Response.End()
end if
rs.Close
Set rs=Nothing
end if
Sub isOK(userName)
Dim Olip ‘ 數據庫中當前登陸用戶(hù)名保存的ip
Dim Oltime ‘ 數據庫中當前登陸用戶(hù)名保存的最后刷新網(wǎng)頁(yè)的時(shí)間,是計算用戶(hù)是否在線(xiàn)的重要數據。
Dim OLip1 ‘ 記錄當前用戶(hù)登陸ip,用來(lái)區分是否為同一用戶(hù)的標示
OLip1=Request.ServerVariables("REMOTE_ADDR")‘取得提交登陸信息用戶(hù)的IP
Set ts=Conn_TOL8.execute("Select * FROM onlyLogin WHERE OLname=‘"& userName & "‘")
if not ts.eof then ‘ 查詢(xún)數據庫是否有此用戶(hù)的登陸過(guò)的信息
OLtime=ts("OLtime")
OLip=ts("OLip")
if OLip1<>OLip and DateDiff("s",OLtime,now()) < maxTime then
‘上句判斷如果提交登陸用戶(hù)ip不是數據庫中最后紀錄的用戶(hù)ip并且
‘用戶(hù)的最后活動(dòng)時(shí)間和當前時(shí)間相隔并沒(méi)超過(guò)規定的秒數則確認此用戶(hù)當前在線(xiàn)
Response.Write "<a href=javascript:history.go(-1)>此用戶(hù)目前在線(xiàn),你無(wú)法從其他地方登陸此賬號!</a>"
Response.End()
else
‘否則的話(huà)判定登陸成功付值給session
Session("lgName")=userName
Session("lgPass")=userPass
Response.Redirect "loginOK.asp"
Response.End
end if
else
‘如果數據庫沒(méi)有次登陸用戶(hù)紀錄則執行下面的語(yǔ)句
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 %>
登陸成功后葉面會(huì )跳轉到loginOK.asp
<style type="text/css">
<!--
body {background-color: #FF9900;}
-->
</style>
<% IF Session("lgName")<>"" then %>
您登陸成功了?。?!下面是潛入網(wǎng)頁(yè)內的iframe為的是在規定的時(shí)間刷新網(wǎng)頁(yè)向服務(wù)器報告你是否在線(xiàn)
為了便于區分,frame網(wǎng)頁(yè)我們采用了白色作為底色
<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 %>
您沒(méi)有登陸哈
<% 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>
到此為止程序就完成了,這個(gè)程序的關(guān)鍵就是判定用戶(hù)是否在線(xiàn)
聯(lián)系客服