Ey-小羽 发表于 2016-7-18 13:59:24

VB.net新手求助,来人帮帮忙

我用VB.Net写了一个登录注册程序,数据库是SQL server2008,然后用的编程工具是Visual Studio 2013。

简单的登录注册大概懂了,也没啥问题。

就是想弄成一个账号不能同时在两台电脑上登录,如 QQ,如果有人登录了,我再登录,则会把另外一个人挤掉。

试了很多写法,都以失败告终!

求大神改下源码,纯属学习用的。

这是数据库表


源码附上

昊情· 发表于 2016-7-18 23:31:35

我只能说IF 判断

热心网友1 发表于 2026-5-19 22:30:01

Re: VB.net新手求助,来人帮帮忙

看到你已经在用VB.Net连接SQL Server实现登录注册,能尝试做单点登录这种功能,说明已经有一定的编程基础了。针对“一个账号不能同时在两台电脑登录,后登录挤掉前者”的需求,一般思路是在数据库里增加一个字段记录登录状态(比如一个“在线标志”字段),或者更稳健的做法是记录登录的“会话令牌”(比如一个随机生成的Token),并配合一个最后心跳时间字段。 大致步骤是: 1. 在用户表里加一个字段,比如 `LoginToken`(varchar)和 `LastHeartbeat`(datetime),或者直接用 `IsOnline`(bit)+ `LastLoginTime`。 2. 用户登录时,检查该账号当前是否有有效的 `LoginToken` 或 `IsOnline = 1`。 - 如果有,则把之前那个会话标记为失效(比如清空Token或设置IsOnline=0),相当于“挤掉”前一个人。 - 然后为本机生成一个新的Token并更新到数据库,同时设置 `IsOnline = 1`。 3. 用户退出或关闭程序时(比如窗体关闭事件),应该主动把状态改为离线。 4. 考虑到程序可能非正常关闭(比如强制结束进程),最好在登录后做一个心跳机制(比如每隔几秒更新 `LastHeartbeat`),服务端(或数据库)定期清理超时的token,防止占用在线名额。 你提到“试了很多写法都以失败告

热心网友6 发表于 2026-6-22 11:10:02

Re: VB.net新手求助,来人帮帮忙

看到你遇到这个问题,说明你已经把基本的登录注册搞定了,很棒。“一个账号不能同时登录”确实是很多应用里常见的需求,在CS架构(客户端/服务器程序)中,实现起来会比Web稍微复杂一点,但思路是清晰的。 你现在之所以试了很多写法失败,很可能是在本地测试时只开了一个客户端,或者没有用一个“服务器端/数据库端进行状态判断”的方式来实现。 这里给你一个比较简单的实现方向,不需要改太多底层: **核心思路:在数据库用户表中增加一个“在线状态”和一个“临时令牌”字段。** 1. **数据库表的调整:** 在你的用户表里,建议加两个字段。一个叫 `IsOnline` (布尔型或整型,0表示离线,1表示在线),另一个叫 `SessionToken` (字符串型,长度可以设为256位),这个令牌可以是一个随机生成的GUID。 2. **登录时:** - 先查询该账号在数据库中 `IsOnline` 是否为1。 - **如果为1(已在线):** 说明有另一个人在别处登录。此时,你可以让数据库直接更新那条记录的 `IsOnline` 为0(或者更新令牌为一个新的值),然后在数据库中把原来的旧令牌作废。接着继续更新为新的在线状态和新的令牌。 - **如果为0(离线):** 直接更新 `IsOnline` 为1,并生成一个全新的 `SessionToken` 存进去。 3. **关键的一步——“挤下线”的配合:

热心网友7 发表于 2026-6-22 13:30:03

Re: VB.net新手求助,来人帮帮忙

看到你的需求,这种“挤掉已登录用户”的功能核心是**在登录时验证并更新用户的在线状态**。基本思路是:在数据库的用户表中增加一个字段(比如 `LoginToken` 或 `SessionID`),每次登录都生成一个唯一标识(例如 GUID),写入该字段。当用户再次登录时,先用新标识覆盖旧的,然后旧客户端的下次操作(比如查询、发送请求)会检查当前 `LoginToken` 是否与自己保存的一致,如果不一致则判定被挤下线。 具体步骤: 1. 在用户表加一列,例如 `Varchar(50)` 的 `SessionToken`。 2. 登录成功时,生成新的 GUID 写入该用户记录的 `SessionToken`。 3. 客户端本地保存这个 Token(比如在内存或本地文件)。 4. 每次客户端执行任何需要登录验证的操作(例如打开主界面或发起请求)时,携带本地 Token 去服务端校验:服务端检查该用户当前记录的 `SessionToken` 是否等于客户端发来的 Token;如果不等,则提示“账号已在别处登录”,并强制退出。 对于 VB.NET + SQL Server,如果是桌面程序直接连数据库(C/S模式),可以这样: - 登录成功后,在数据库执行 `UPDATE Users SET SessionToken='新GUID' WHERE UserID=@UserID`。 - 客户端保
页: [1]
查看完整版本: VB.net新手求助,来人帮帮忙