| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2355 人关注过本帖
标题:怎样防止同一帐号同时登录?
只看楼主 加入收藏
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5810
专家分:118
注 册:2005-4-7
收藏
得分:0 
也是用APPLICATION做的啊
怎么强制退出?
就是如果我登陆了
并且我不按照正常程序退出
直接关闭IE
这样你怎么清空APPLICATION?

2005-08-10 09:04
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
收藏
得分:0 
应该是Application与Session结合吧。

Application是不会过期的,除非重启IIS或者整个网站没有一个人访问。
因此当一个用户登录后直接关闭浏览器,他的Application依然存在,此时我们可以通过Session来将Application清除,用户的Session过期时会触发Session_OnEnd事件。

天津网站建设 http://www./
2005-08-10 09:26
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5810
专家分:118
注 册:2005-4-7
收藏
得分:0 
老大
服务器上的APPLICATION过多会不会对服务器造成影响?
要是有的话
会到什么程度?

我以前做类似的东西
想利用数据库实现

可是SESSION_ONEDN的函数好象不能对数据库操作
不知道我的理解对不对
希望老大解释一下

2005-08-10 09:30
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
收藏
得分:0 
你的网站同时有多少人访问?你的服务器有多大内存?几个CPU?CPU频率是多少?

权衡一下就知道了。

天津网站建设 http://www./
2005-08-10 09:33
pshcl
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2005-6-22
收藏
得分:0 
思路:
只好做一个强制退出的页面了
这个问题肯定不是我等一下子做出来
比如我的“123”登录后,如果关闭IE退出后再次登录就会显示“该用户已登录”
这时用iwantlogin.asp退出(当然这个页面可以做自动链接)
毕竟密码帐号是自己的
以上只能是权宜之计,各位老大提提意见。
2005-08-10 09:49
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 

用事件触发和数据库怎么样啊,动网的论坛不是有在线用户列表吗?好像这就是用的一个专门的在线表online. 用两个字段吧: userid和last_visit_time 建一个专门触发这个时间的文件,叫event.asp,用<!--#include file="event.asp"-->包含在各个页面,这样用户只要刷新一次页面就会触发这个事件. 用户每触发一次事件,就把自己的ID和现在的时间(就是最后活动时间)更新一下,如果在线表中没有这个用户的记录就插入,同时还要把整个在线表更新一下,删除40分钟内没活动的用户. 下面是我想象的代码片断: [QUOTE]dim sql,rs sql="select * from online where userid="&sesssion("id") set rs=conn.execute(sql) if rs.eof then conn.execute("insert into online set userid="&session("id")&",last_visit_time='"&now()&"'") else conn.execute("updata online set userid="&session("id")&",last_visit_time='"&now()&"'") end if rs.close set rs=nothing

'下面的代码删除在线表中40分钟不活动的用户 conn.execute("delete * from online where datediff("n",last_visit_time,now)>40") '这个SQL的判断语句很可能不能执行,我只是想表示一下实现的思想 conn.close set conn=nothing[/QUOTE]

2005-08-10 09:52
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5810
专家分:118
注 册:2005-4-7
收藏
得分:0 
做过这样的

但是总是感觉弹出窗口或对话框给人的感觉不好

而HTML又不支持窗口关闭时触发函数的功能
只能窗口关闭时弹出新窗口或对话框

2005-08-10 09:52
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 
忘了一点,用户退出也应该把在线表中用户的信息删除,在退出的文件如logout.asp中加入如下代码
conn.execute("delete * from online where userid="&amp;session("id"))

在登陆页面放上这么一段代码就可以判断可不可以登陆了
sql="select * from online where userid="&amp;request.form("id")
set rs=conn.execute(sql)
if rs.eof then
    执行登陆的代码
else
    提示用户已经在别处登陆
end if
rs.close
set rs=nothing
2005-08-10 09:56
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 
27楼的,我说的触发事件并不是弹出窗口来触发,是靠包含在页面中的ASP文件.
至于用户关闭窗口的并不算退出,40分钟内不活动才算退出,如果你40分钟内不活动别的用户会触发这个事件把你从在线表中删除.
2005-08-10 09:59
pshcl
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2005-6-22
收藏
得分:0 
不错,老大,我的思路就是这样。非常赞同!
2005-08-10 10:01
快速回复:怎样防止同一帐号同时登录?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016708 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved