C# 求一个靠谱且完善的逻辑思路

稻庄 2013-11-14 03:19:44
WinForm,用户登录如何实现一个账号在同一个时刻里只允许登录一次?
...全文
462 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞小猪 2013-11-15
  • 打赏
  • 举报
回复
引用 13 楼 ghypnus 的回复:
考虑两种情况:客户端断电 if(客户端断电) {服务端flag = 0} 服务端断点 if(服务端断电) {整张用户表 flag = 0}
都断电了你还有办法这样判断么?
  • 打赏
  • 举报
回复
考虑两种情况:客户端断电 if(客户端断电) {服务端flag = 0} 服务端断点 if(服务端断电) {整张用户表 flag = 0}
稻庄 2013-11-15
  • 打赏
  • 举报
回复
引用 11 楼 xiaozhu39505 的回复:
[quote=引用 9 楼 caozhy 的回复:] http://download.csdn.net/detail/caozhy/4646408
看了你里面的源码,里面有个缺陷就是,客户端非正常关闭例如直接结束进程后,在登陆的话,就登陆不了了,得等一分钟之后了吧[/quote] 这时间不是可以自己定义的麽
飞小猪 2013-11-15
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
http://download.csdn.net/detail/caozhy/4646408
看了你里面的源码,里面有个缺陷就是,客户端非正常关闭例如直接结束进程后,在登陆的话,就登陆不了了,得等一分钟之后了吧
卧_槽 2013-11-15
  • 打赏
  • 举报
回复
绝对单一用户登录的话,就是后登录用户踢先登录用户下线。后登录有提示,当前用户已登录。先登录用户进行操作时,提示已在其他地点登录,被迫下线。
md5e 2013-11-15
  • 打赏
  • 举报
回复
如果是WinForm那就更加好办了,记录最近用户所登陆的机器编码,机器编码不正确的就自动下线
md5e 2013-11-15
  • 打赏
  • 举报
回复
保存 SessionID ,然后每隔一段时间 判断一次SessionID,如果不等于现在的SessionID就自动退出(清除Session)
稻庄 2013-11-15
  • 打赏
  • 举报
回复
我有这样一个实现思路,各位朋友可帮我分析一下,如此方案是否有欠妥的地方: 1)数据库建立一个[userid登录在线]表,字段为userid,IP,登录时间。 2)在登录窗口登录按钮事件中,先根据登录窗口的userid判断[userid登录在线]表中是否有该userid的记录,如果在线表中无该userid的登录记录,则将此次的登录信息(userid,IP,loginTime)insert进[userid登录在线]表中;如果在线表中有该userid的登录记录,则先删除该userid记录,然后再将此次的登录信息插入到在线表中。 3)登录成功后将进入系统主窗口。 4)在主窗口设置一个定时检测,检查主窗口中的userid,IP与在线表中的userid,IP是否一致,如果不一致,则定时地弹出窗口,提示账户已被踢出,如果一致,则可以成功使用主窗体。
小猪八Q 2013-11-14
  • 打赏
  • 举报
回复
这个需要一个服务器端,总之一个数据存储中心,可以在内存中实时记录,也可以在数据库中临时标识,将当前登录的客户端标识处理,而且服务器端必须有间隔的去判断当前那些客户端已经失效(这个可以使用WCF服务来实现,https://inchatter.codeplex.com/一个正在进行中的WCF系统内部即时通讯模块,你可以参考下服务器端的写法),这个就是需要部署服务器端,有点麻烦和夸张,不过使用数据库的话,在断电的情况下,又不太好判断,没有与客户端主动联系和判断的过程。 基本上就是这些,希望能够帮到你
threenewbee 2013-11-14
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/caozhy/4646408
飞小猪 2013-11-14
  • 打赏
  • 举报
回复
用心跳模式,比如1分钟跟服务器通信一次,服务器数据库的登录日志里面记录最后通信时间,最后通信时间超过1分钟的,就可以认为是下线了。
稻庄 2013-11-14
  • 打赏
  • 举报
回复
引用 6 楼 u011303459 的回复:
引用
后登入将前者踢下线
这种应该是目前用的最多的一种方式了,qq就是用的这种模式。 简单,利于控制。
我认同
feiniao19830822 2013-11-14
  • 打赏
  • 举报
回复
引用
后登入将前者踢下线
这种应该是目前用的最多的一种方式了,qq就是用的这种模式。 简单,利于控制。
b63651216 2013-11-14
  • 打赏
  • 举报
回复
服务器保活.
clark523 2013-11-14
  • 打赏
  • 举报
回复
引用 1 楼 foreverwoyou 的回复:
在用户表里面加个flag进行判断,听起来很不错,但总会因为一些不可估的因素,如断电等情况导致flag还处于登录状态。请教还有没有其他比较靠谱的实现方式?
采用心跳模式来得到登录的客户端是否有响应,如果没有响应则视作已经离开。
S.F. 2013-11-14
  • 打赏
  • 举报
回复
写数据库、文件、注册表等等手段记录当前登录的用户;后登入将前者踢下线后做好标志信息,程序需要适合监视当前登录的状态
bdmh 2013-11-14
  • 打赏
  • 举报
回复
这个需要你在服务端做表示,这样才能限制任何地方都不能重复登陆,加一个服务器,上面写服务程序,客户端通过接口请求登陆
稻庄 2013-11-14
  • 打赏
  • 举报
回复
在用户表里面加个flag进行判断,听起来很不错,但总会因为一些不可估的因素,如断电等情况导致flag还处于登录状态。请教还有没有其他比较靠谱的实现方式?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧