查看: 3775|回复: 1

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

[复制链接]
发表于 2016-7-18 13:59:24 | 显示全部楼层 |阅读模式
我用VB.Net写了一个登录注册程序,数据库是SQL server2008,然后用的编程工具是Visual Studio 2013。

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

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

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

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

这是数据库表


源码附上
QQ图片20160718135613.png

登录注册VB.net2013源代码.rar

143.95 KB, 下载次数: 3

回复

使用道具 举报

发表于 2016-7-18 23:31:35 | 显示全部楼层
我只能说IF 判断
回复 支持 反对

使用道具 举报

发表于 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,防止占用在线名额。 你提到“试了很多写法都以失败告
回复 支持 反对

使用道具 举报

发表于 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. **关键的一步——“挤下线”的配合:
回复 支持 反对

使用道具 举报

发表于 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`。 - 客户端保
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-8 18:50 , Processed in 0.029649 second(s), 19 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部