---凌冰玉 2006.01.10于郑州
一、利用access设置临时表,将用户首次登录信息记录下来,每次有用户登录时都首先检验所输入的用户名是否正在使用:
global.asa:
<script language="vbscript" runat="server">
Sub Application_OnStart
application("app")="start"
End Sub
Sub Application_OnEnd
End Sub
</script>
login.asp: '此为测试文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>请输入登录口令</title>
</head>
<body>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<form name="form1" method="post" action="firstlogin.asp">
<table width="483" height="61" border="1" align="center">
<tr>
<td width="322" height="55">请输入登录口令
<input name="password" type="text" id="password"> </td>
<td width="145"> <input type="submit" name="Submit2" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
firstlogin.asp:
<!--#include file="ReloginConn.asp"-->
<% application("app0")="start"
response.Write(application("app")&"<br>")
if application("app")="start" then
sql="delete from loginfo "
conn.execute(sql)
response.Write("已经成功执行清除操作:"&sql&"<br>")
else
end if
%>
<%
session("user")=request("password")
application("app")= session("user")
ip=Request.ServerVariables("REMOTE_ADDR")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sql="delete from loginfo where DateDiff(""s"",cstr(logintime),cstr(now))>1200"
conn.execute(sql)
response.Write("已经成功执行清除操作:"&sql&"<br>")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sql="select count(*) as cnt from loginfo where usr='"&session("user")&"'"
set rs=conn.execute(sql)
if rs("cnt")>0 then
response.Write("<script>alert('对不起,您的账号正在其他地方被使用或者您上次登录后进行了非法的操作,请稍后再试!');</script>")
response.End()
else
sql="insert into loginfo values('"&Session.SessionID&"','"&session("user")&"','"&cstr(now())&"','"&ip&"')"
conn.execute(sql)
response.Write("已经成功登录!:"&sql)
end if
set conn=nothing
%>
ReloginConn.asp:
<%
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/asptool/checkReLogin/loginfo.mdb")
Conn.Open
%>
OprateRefresh.asp:
<!--#include file="ReloginConn.asp"-->
<%
sql="update loginfo set logintime='"&cstr(now)&"' where usr='"&session("user")&"'"
conn.execute(sql)
response.Write("已经成功刷新!:"&sql&"<br>")
%>
logout.asp:写一个正常退出并清除对应记录的操作即可(可参考第二部分的logout.asp内容);
二、利用application和session模拟数组的方法共同来实现:
ReFreshAndDel.asp:
<% DIM usrname
usrname=request("password")''''''''''''''''''''''''''''''''''''''''''''
Function RefreshInfo(strUsr,strTm)'刷新信息并执行删除操作的函数
dim t
part0=split(strUsr,"+")
part1=split(strTm,"+")
for i=1 to ubound(part0)
tstr=part1(i)
t=tstr
tmpn=DateDiff("s",t,now())'必须预先给变量t作定义
if tmpn>1200 then'默认删除超过20分钟的会话
strUsr=replace(strUsr,"+"&part0(i),"")
strTm=replace(strTm,"+"&part1(i),"")
else
end if
next
RefreshInfo=strUsr&"~"&strTm
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''以下执行清除过期连接操作
if application("users")<>"" and application("loginTm")<>"" then
t1=application("users")
t2=application("loginTm")
'response.Write("<br>not blank:"&t1&t2)
temp=RefreshInfo(t1,t2)
tmp=split(temp,"~")
application("users")=tmp(0)
application("loginTm")=tmp(1)
else
'response.Write("app is blank")
end if
%>
LoginRegIntoApp.asp:
<%
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''以下执行判断及登录信息记录操作
if InStr(application("users"),usrname)>0 then
response.Write("<script>alert('对不起,您的账号正在其他地方被使用或者您上次登录后进行了非法的操作,请稍后再试!');history.back();</script>")
response.End()
else
application.lock
application("users")=application("users")&"+"&usrname
application("loginTm")=application("loginTm")&"+"&cstr(now())
application.unlock
end if
%>
UpdateLoginTm.asp:
<% sessionV=session("yonghuming")''''''''''''''''''''''''''''
Function RefreshTm(strUsr,strTm,usr)'刷新函数
part0=split(strUsr,"+")
part1=split(strTm,"+")
for i=1 to ubound(part0)
tstr=part0(i)
if usr=tstr then
strTm=replace(strTm,"+"&part1(i),"+"&cstr(now()))
else
end if
next
RefreshTm=strUsr&"~"&strTm
End Function
tr1=application("users")
tr2=application("loginTm")
if sessionV="" then
response.Write("<script>alert('请勿试图进行非法操作!原因:可能您的登录会话已经过期或您想单独利用本页进行非正常操作。');</script>")
else
tempr=RefreshTm(tr1,tr2,sessionV)
tmpr=split(tempr,"~")
application.lock
application("users")=tmpr(0)
application("loginTm")=tmpr(1)
application.unlock
end if
''''''''''''''''''''''''''''''''''''''''刷新操作时间以保证与session(会话)默认到期时间相等:默认为20分钟
%>
LogOut.asp:
<% DIM usrname
usrname=session("yonghuming")''''''''''''''''''''''''''''''''''''''''''''
Function LogOutInfo(strUsr,strTm)'刷新信息并执行删除操作的函数
part0=split(strUsr,"+")
part1=split(strTm,"+")
for i=1 to ubound(part0)
if part0(i)=usrname then'正常删除执行退出操作的用户信息
strUsr=replace(strUsr,"+"&part0(i),"")
strTm=replace(strTm,"+"&part1(i),"")
else
end if
next
LogOutInfo=strUsr&"~"&strTm
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''以下执行清除正常退出连接操作
if application("users")<>"" and application("loginTm")<>"" then
t1=application("users")
t2=application("loginTm")
'response.Write("<br>not blank:"&t1&t2)
temp=LogOutInfo(t1,t2)
tmp=split(temp,"~")
application("users")=tmp(0)
application("loginTm")=tmp(1)
else
response.Write("<script>alert('请勿试图进行非法操作!原因:可能您的登录会话已经过期或您想单独利用本页进行非正常操作。');window.opener=null;window.close();</script>")
end if
%>
三、利用sqlserver临时表来实现。(请参考SQLSERVER相关文档)