首 页
|
域名注册
|
虚拟主机
|
网站制作
|
网站案例
|
网站优化
|
网站推广
|
企业邮局
|
服务器租用
|
广告设计
首页
域名注册
虚拟主机
网站建设
企业邮局
网站优化
网站备案
服务器租用
其它服务
网站设计
成都网站制作
网站建设
成都做网站
网站案例
域名申请
虚拟主机
域名注册
域名相关知识及购买
中文域名问题
网址URL转发
转入转出及过户
域名交易
虚拟主机
虚拟主机相关知识
域名解析
网址URL转发
转入转出及过户
域名交易
网站建设
网站建设相关知识
域名解析
网址URL转发
转入转出及过户
域名交易
企业邮局
域名相关知识及购买
域名解析
网址URL转发
转入转出及过户
域名交易
网络营销
百度竟价排名
网站制作知识
网址URL转发
转入转出及过户
域名交易
网站备案
域名相关知识及购买
域名解析
网址URL转发
转入转出及过户
域名交易
服务器租用
服务器相关知识
域名解析
网址URL转发
转入转出及过户
域名交易
您现在的位置:
创新互联
>>
网站建设
>>
网络建设常见问题
>> ASP防止同时登陆的问题
ASP防止同时登陆的问题
作者:曾小姐 文章来源:成都网站建设 点击数:397 更新时间:2012-04-02
网站登录对于
网站设计
者来说,司空见惯,但是今天小编还是想跟大家说说实现这个功能的方法,总的来说可有两种方式:
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对象里的某项
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>
到此为止程序就完成了,这个程序的关键就是判定用户是否在线。
上一篇文章:
通过COM来获取CookieContainer,简单又好用
下一篇文章:
Flash遮盖层的解决办法
分享到:
QQ空间
新浪微博
腾讯微博
人人网
开心网
百度搜藏
腾讯微博
网易微博
关于创新互联
|
网站建设
|
域名注册
|
中文域名
|
付款方式
|
常见问题
|
代理加盟
|
云服务器
|
网站空间
|
网站推广优化
|
友情链接
建站电话:028-86922220 13518219792 公司地址:成都市太升南路288号锦天国际A幢1002号
支持信箱:service@cdxwcx.com 版权所有:创新互联-专业做网站网站设计网站建设 蜀ICP备13010860号
创新互联成都专业网站建设:
网页设计
网站域名申请
成都网站制作
成都做网站
中文域名注册
通用网址申请
无线网址注册
400电话
ASP防止同时登陆