c# 客户端确保单用户登录

2017-07-06 21:50:28 +08:00
 JohnLou

最近用 c# 开发个客户端, 怎么确保只能单一用户登录。并且用户不退出,不能在其他设备登录。

2373 次点击
所在节点    问与答
17 条回复
zvcs
2017-07-06 21:57:50 +08:00
c 管不到 c,只能在 s 端控制。转前端吧
JohnLou
2017-07-06 22:00:47 +08:00
@zvcs 前后端都要开发,客户端用 c#,后端用 php。
geelaw
2017-07-06 22:04:41 +08:00
读取硬件编码用于登录,但是你这个场景很可疑,值得思考是否需要重新设计
billlee
2017-07-06 22:26:04 +08:00
如果哪台设备丢了 /重装系统了 /数据文件被删了,岂不是再也登录不了了?
JohnLou
2017-07-06 22:51:00 +08:00
@billlee
@geelaw
都搞错我意思了,就跟玩游戏一样,我登录了肯定不能再登录了,这个该怎么实现。
nfroot
2017-07-06 23:13:56 +08:00
简单啊,首先你的客户端登陆了服务器,服务器没有管控的吗?(比如可以查到当前连接到服务器有哪些客户端,登陆了什么用户)

然后拒绝登陆啊!

要么你就搞一个心跳包类似的数据库字段,超过一定时间段没通讯就算是未登陆了

如果还在那个时间段,服务器就尝试和客户端通讯一下,看看是不是还活着,活着就不给当前登陆用户登陆就好了。

这不难吧?没搞懂你是卡在哪一步了
czkwg8
2017-07-06 23:45:35 +08:00
同时在线这样的设定肯定在 server 实现啊
wafm
2017-07-07 00:04:13 +08:00
服务端唯一 session
JohnLou
2017-07-07 01:55:50 +08:00
@nfroot 我搜了下资料基本这么想的,发个帖为了确认下是否没错。现在在找些简单的代码,服务器的访问量应该挺小的。
msg7086
2017-07-07 02:14:46 +08:00
@JohnLou 玩游戏并不一定是你登录了就不能再登录了。
很多网页游戏就可以重复登录。
如果是联机游戏的话,因为客户端是与服务器持久连接,断线就意味着登出了。
而你这后端用 PHP 的话,不可能前后有持久连接,那么就应该和客户讨论决定,「什么样的场景认定用户掉线」。
coderfox
2017-07-07 06:52:41 +08:00
@JohnLou
游戏的管控一般是新端上线就把旧端的凭据标为失效,来保证只有一个客户端在线。
geelaw
2017-07-07 07:13:01 +08:00
一个客户端多个用户登录是一个功能,如果你不做这个功能,又怎么可能出现一个客户端登录多个账户的情况?
imn1
2017-07-07 08:59:33 +08:00
@geelaw
他又没说一个客户端,应该是指多设备同时登录的情况吧
imydou
2017-07-07 11:20:01 +08:00
登陆生成唯一 token,旧 token 失效
wshcdr
2017-07-07 11:45:30 +08:00
@imydou 说得对
yansideyu
2017-07-07 16:15:39 +08:00
服务器端加个程序,tcp 或者 udp 通信,心跳包保证活跃,超过一定的时间就是掉线了,登陆的时候服务器检查活跃列表,在活跃列表的就不让登陆了
JohnLou
2017-07-07 18:15:53 +08:00
@yansideyu 都是那么说,上网搜了下,现成的那么少。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX