讨论一下,如何在同一时间只让一个用户登陆?

时间:2021-08-22 15:40:26
讨论一下,如何在同一时间只让一个用户登陆?有比用数据库使用临时表更好的方法吗?

19 个解决方案

#1


怎么都没有人参于啊?

#2


老问题了,到这版块搜索下吧

#3


恩。。这样试试看可以吗》
SESSION、或COOKIES 存储用户信息,
然后在判断。如果 有相同的信息,则出错~

#4


查过啊,没有查到。

#5


ctv0071(wujkj) 

这种方式只适用于客户机,不适合我所提的问题!

#6


从理论上来讲,同一时刻肯定只有一个用户登陆,因为服务器CPU处理登陆指令肯定是串行进行滴

或者说规定同一IP只能有一个用户具有登陆的权限
或者说规定只允许一位用户在线
要实现这种功能,除了楼主所说的应用临时表或者临时文件(如FSO读取文件)外,我建议采用如下方案(没试验过,不保证效果)

ASP内置对象Application,通过修改global.asa文件里的内容实现特定状态字的修改或者判断,例如
sub application_onstart
Application("LockServer")=0'此变量自己定义
Application("LockSessionID")=""'此变量自己定义
sub end

sub application_onend
Application("LockServer")=1
sub end

sub session_ontart
Application.Lock
if Application("LockServer")=1 then
  response.redirect "err.asp"?message=err
else
  Application("LockServer")=1
end if
Application.Unlock
sub end


sub session_ontart
Application.Lock
if Application("LockServer")=1 then
  response.redirect "err.asp"?message=err
else
  Application("LockServer")=1
  Application("LockSessionID")=Session.SessionID
end if
Application.Unlock
sub end

sub session_onend
Application.Lock
if Application("LockServer")=1 and  Application("LockSessionID")=Session.SessionID then
  Application("LockServer")=0'此变量自己定义
  Application("LockSessionID")=""'此变量自己定义
end if
Application.Unlock
sub end

#7


大意了,写重复了
第一个 sub session_onstart 得删了
sub application_onend 中那句Application("LockServer")=1也可以不要

楼主如果试了,给点反馈
还有如果不行的话{ if Application("LockServer")=1 }这句可能得改为
if Application("LockServer").属性名称=1
我也不是很懂啦反正就这个意思

这两篇是application和session区别的教程文章
http://www.pconline.com.cn/pcedu/empolder/wz/asp/10111/15107.html
http://www.shanke.cn/2004/12-14/101822.html

#8


我没有试,但是通过对Application和session的了解,其共同的缺点是资源消耗大。
而application的lock属性,只是确保同一时刻仅有一个客户修改和存取。但是当unlock一结束,别人又可以继续写了。所以,这个应该是不行的。
其次一点,application只有服务器重启后才会消失,如果你所说的可以成立的话,一个新的问题就出现了,当用户非法退出时,那么,这个以登陆的错施如何去掉呢?并且,如果不重起服务器,系统受不了,这不是个好方法。

#9


◆application的lock和unlock和你的要求没有关系,只是为了程序严谨
session_onstart事件中
Application("LockServer")=1
Application("LockSessionID")=Session.SessionID 
能够确保其它用户无法登陆
在 对应sessionId 发生 session_onend后自然会释放登陆权限

◆用户非法退出,在session约定时间(Session.Timeout)到期后会触发session_onend事件来释放登陆权限吧?

◆资源消耗的问题,是在这里用几段代码效率高还是访问临时表效率高我真的不知道了:)我也是个初学者

●所以我觉得应该可行

◆另外楼主要实现的功能可否描述精确一些


#10


我所想要达到的效果就是,不论在哪里,在同一个时间,一个用户名,在未退出前,别人都不能使用这个用户名登陆。也就是说,同一时间,同一用户名,不能在不同机子同时登陆,只有等用户退出后,才能在登陆。

#11


怎么没有人讨论了呢?

#12


唉,明天在没有人回,我就关贴了!

#13


增加登录信息表。
用户登录后,记录其ip,时间等信息。
用户退出时,记录其退出时间等信息。
用户关闭浏览器时,触发退出事件。

登录时,检查该表,该用户是否在其他ip机子上登录了,是否退出了。

#14


我也是这么想的,但是问题是,如何抓到关闭浏览器的事件。不会。

#15


只能用"退出登陆"吗?
如何用事件啊?顶

#16


顶~~~

#17


再顶,今天没有人在回复了,晚间就结贴算了。

#18


顶,好问题啊!,偶不会啊!..............

#19


结贴了!!

郁闷

#1


怎么都没有人参于啊?

#2


老问题了,到这版块搜索下吧

#3


恩。。这样试试看可以吗》
SESSION、或COOKIES 存储用户信息,
然后在判断。如果 有相同的信息,则出错~

#4


查过啊,没有查到。

#5


ctv0071(wujkj) 

这种方式只适用于客户机,不适合我所提的问题!

#6


从理论上来讲,同一时刻肯定只有一个用户登陆,因为服务器CPU处理登陆指令肯定是串行进行滴

或者说规定同一IP只能有一个用户具有登陆的权限
或者说规定只允许一位用户在线
要实现这种功能,除了楼主所说的应用临时表或者临时文件(如FSO读取文件)外,我建议采用如下方案(没试验过,不保证效果)

ASP内置对象Application,通过修改global.asa文件里的内容实现特定状态字的修改或者判断,例如
sub application_onstart
Application("LockServer")=0'此变量自己定义
Application("LockSessionID")=""'此变量自己定义
sub end

sub application_onend
Application("LockServer")=1
sub end

sub session_ontart
Application.Lock
if Application("LockServer")=1 then
  response.redirect "err.asp"?message=err
else
  Application("LockServer")=1
end if
Application.Unlock
sub end


sub session_ontart
Application.Lock
if Application("LockServer")=1 then
  response.redirect "err.asp"?message=err
else
  Application("LockServer")=1
  Application("LockSessionID")=Session.SessionID
end if
Application.Unlock
sub end

sub session_onend
Application.Lock
if Application("LockServer")=1 and  Application("LockSessionID")=Session.SessionID then
  Application("LockServer")=0'此变量自己定义
  Application("LockSessionID")=""'此变量自己定义
end if
Application.Unlock
sub end

#7


大意了,写重复了
第一个 sub session_onstart 得删了
sub application_onend 中那句Application("LockServer")=1也可以不要

楼主如果试了,给点反馈
还有如果不行的话{ if Application("LockServer")=1 }这句可能得改为
if Application("LockServer").属性名称=1
我也不是很懂啦反正就这个意思

这两篇是application和session区别的教程文章
http://www.pconline.com.cn/pcedu/empolder/wz/asp/10111/15107.html
http://www.shanke.cn/2004/12-14/101822.html

#8


我没有试,但是通过对Application和session的了解,其共同的缺点是资源消耗大。
而application的lock属性,只是确保同一时刻仅有一个客户修改和存取。但是当unlock一结束,别人又可以继续写了。所以,这个应该是不行的。
其次一点,application只有服务器重启后才会消失,如果你所说的可以成立的话,一个新的问题就出现了,当用户非法退出时,那么,这个以登陆的错施如何去掉呢?并且,如果不重起服务器,系统受不了,这不是个好方法。

#9


◆application的lock和unlock和你的要求没有关系,只是为了程序严谨
session_onstart事件中
Application("LockServer")=1
Application("LockSessionID")=Session.SessionID 
能够确保其它用户无法登陆
在 对应sessionId 发生 session_onend后自然会释放登陆权限

◆用户非法退出,在session约定时间(Session.Timeout)到期后会触发session_onend事件来释放登陆权限吧?

◆资源消耗的问题,是在这里用几段代码效率高还是访问临时表效率高我真的不知道了:)我也是个初学者

●所以我觉得应该可行

◆另外楼主要实现的功能可否描述精确一些


#10


我所想要达到的效果就是,不论在哪里,在同一个时间,一个用户名,在未退出前,别人都不能使用这个用户名登陆。也就是说,同一时间,同一用户名,不能在不同机子同时登陆,只有等用户退出后,才能在登陆。

#11


怎么没有人讨论了呢?

#12


唉,明天在没有人回,我就关贴了!

#13


增加登录信息表。
用户登录后,记录其ip,时间等信息。
用户退出时,记录其退出时间等信息。
用户关闭浏览器时,触发退出事件。

登录时,检查该表,该用户是否在其他ip机子上登录了,是否退出了。

#14


我也是这么想的,但是问题是,如何抓到关闭浏览器的事件。不会。

#15


只能用"退出登陆"吗?
如何用事件啊?顶

#16


顶~~~

#17


再顶,今天没有人在回复了,晚间就结贴算了。

#18


顶,好问题啊!,偶不会啊!..............

#19


结贴了!!

郁闷

#20