V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
JohnLou
V2EX  ›  问与答

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

  •  
  •   JohnLou · 2017-07-06 21:50:28 +08:00 · 2314 次点击
    这是一个创建于 2498 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    然后拒绝登陆啊!

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

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

    这不难吧?没搞懂你是卡在哪一步了
    czkwg8
        7
    czkwg8  
       2017-07-06 23:45:35 +08:00
    同时在线这样的设定肯定在 server 实现啊
    wafm
        8
    wafm  
       2017-07-07 00:04:13 +08:00 via iPhone
    服务端唯一 session
    JohnLou
        9
    JohnLou  
    OP
       2017-07-07 01:55:50 +08:00
    @nfroot 我搜了下资料基本这么想的,发个帖为了确认下是否没错。现在在找些简单的代码,服务器的访问量应该挺小的。
    msg7086
        10
    msg7086  
       2017-07-07 02:14:46 +08:00
    @JohnLou 玩游戏并不一定是你登录了就不能再登录了。
    很多网页游戏就可以重复登录。
    如果是联机游戏的话,因为客户端是与服务器持久连接,断线就意味着登出了。
    而你这后端用 PHP 的话,不可能前后有持久连接,那么就应该和客户讨论决定,「什么样的场景认定用户掉线」。
    coderfox
        11
    coderfox  
       2017-07-07 06:52:41 +08:00 via Android
    @JohnLou
    游戏的管控一般是新端上线就把旧端的凭据标为失效,来保证只有一个客户端在线。
    geelaw
        12
    geelaw  
       2017-07-07 07:13:01 +08:00 via Android
    一个客户端多个用户登录是一个功能,如果你不做这个功能,又怎么可能出现一个客户端登录多个账户的情况?
    imn1
        13
    imn1  
       2017-07-07 08:59:33 +08:00
    @geelaw
    他又没说一个客户端,应该是指多设备同时登录的情况吧
    imydou
        14
    imydou  
       2017-07-07 11:20:01 +08:00
    登陆生成唯一 token,旧 token 失效
    wshcdr
        15
    wshcdr  
       2017-07-07 11:45:30 +08:00
    @imydou 说得对
    yansideyu
        16
    yansideyu  
       2017-07-07 16:15:39 +08:00
    服务器端加个程序,tcp 或者 udp 通信,心跳包保证活跃,超过一定的时间就是掉线了,登陆的时候服务器检查活跃列表,在活跃列表的就不让登陆了
    JohnLou
        17
    JohnLou  
    OP
       2017-07-07 18:15:53 +08:00
    @yansideyu 都是那么说,上网搜了下,现成的那么少。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4229 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:16 · PVG 13:16 · LAX 22:16 · JFK 01:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.