日期:2014-05-17  浏览次数:21050 次

C# 求一个靠谱且完善的逻辑思路
WinForm,用户登录如何实现一个账号在同一个时刻里只允许登录一次?

------解决方案--------------------
这个需要你在服务端做表示,这样才能限制任何地方都不能重复登陆,加一个服务器,上面写服务程序,客户端通过接口请求登陆
------解决方案--------------------
写数据库、文件、注册表等等手段记录当前登录的用户;后登入将前者踢下线后做好标志信息,程序需要适合监视当前登录的状态
------解决方案--------------------
引用:
在用户表里面加个flag进行判断,听起来很不错,但总会因为一些不可估的因素,如断电等情况导致flag还处于登录状态。请教还有没有其他比较靠谱的实现方式?

采用心跳模式来得到登录的客户端是否有响应,如果没有响应则视作已经离开。
------解决方案--------------------
用心跳模式,比如1分钟跟服务器通信一次,服务器数据库的登录日志里面记录最后通信时间,最后通信时间超过1分钟的,就可以认为是下线了。

------解决方案--------------------
http://download.csdn.net/detail/caozhy/4646408
------解决方案--------------------
这个需要一个服务器端,总之一个数据存储中心,可以在内存中实时记录,也可以在数据库中临时标识,将当前登录的客户端标识处理,而且服务器端必须有间隔的去判断当前那些客户端已经失效(这个可以使用WCF服务来实现,https://inchatter.codeplex.com/一个正在进行中的WCF系统内部即时通讯模块,你可以参考下服务器端的写法),这个就是需要部署服务器端,有点麻烦和夸张,不过使用数据库的话,在断电的情况下,又不太好判断,没有与客户端主动联系和判断的过程。

基本上就是这些,希望能够帮到你
------解决方案--------------------
引用:
http://download.csdn.net/detail/caozhy/4646408

看了你里面的源码,里面有个缺陷就是,客户端非正常关闭例如直接结束进程后,在登陆的话,就登陆不了了,得等一分钟之后了吧
------解决方案--------------------
保存 SessionID ,然后每隔一段时间 判断一次SessionID,如果不等于现在的SessionID就自动退出(清除Session)
------解决方案--------------------
绝对单一用户登录的话,就是后登录用户踢先登录用户下线。后登录有提示,当前用户已登录。先登录用户进行操作时,提示已在其他地点登录,被迫下线。