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

2017 年 7 月 6 日
 JohnLou

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

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

然后拒绝登陆啊!

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

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

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

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

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

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

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

© 2021 V2EX