首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户登录技术C# Win应用

用户登录技术C# Win应用
EN

Stack Overflow用户
提问于 2009-01-08 07:52:21
回答 4查看 2.9K关注 0票数 1

大家好,我正在做C#(2.0) windows应用程序和SQL2005 Database.The网络应用程序通过数据库通信的ERP解决方案。我使用普通的技术进行用户登录和注销,保持状态bit.My的问题是当我的应用程序由于任何其他原因中断时,用户状态可能不change.That会导致用户无法在下一个time.How登录。我能解决这个问题吗?你能给出一些新的用户操作技术吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-08 09:59:44

如果您打算禁止在不同计算机上共享同一用户名,请在使用有效密码登录后,将该计算机上的唯一令牌登录到staff.last_logged_at = @unique_token.注销时,设置staff.last_logged_at = '‘。这样,即使计算机被中断(由于病毒导致程序崩溃,或意外按下计算机的重置按钮等,因此last_logged_at未重置为''),用户仍然可以登录,只需检查用户当前登录的计算机的令牌是否与last_logged_at相同。如果相同,他/她仍然可以登录。

如果某个用户试图使用另一个用户的用户名登录,只需检查该用户计算机的机器令牌与另一个用户的last_logged_at是否相同,如果不相同,则禁止登录,这意味着两个用户共享相同的密码。

现在假设计算机真的崩溃了(处理器崩溃,硬盘崩溃,操作系统需要重新安装,等等)。必须允许用户使用其他计算机。创建一个管理模块,它可以将设置为用户的last_logged_at。

对于@unique_token,只要在计算机上使用任何唯一且永久的,比方说MAC地址,或者散列任何关于操作系统设置的东西。

伪代码:

代码语言:javascript
复制
Logging In:

if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and (last_logged_at = '' or last_logged_at = @unique_token) ) <> 0 then then

    -- allow login          
    update staff set last_logged_at = @unique_token where staff_name = @staff_name



else if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and last_logged_at <> @unique_token) <> 0 then then

    -- disallow login
     throw exception "You cannot use the same user name on two or more computers.   Contact the administrator if you have any concerns"

else

    -- disallow login
    throw exception "Wrong password"

end if


Logging Out:

update staff set last_logged_at = '' where staff_name = @staff_name
票数 1
EN

Stack Overflow用户

发布于 2009-01-08 08:02:34

如何通过为每次登录维护一个会话来跟踪用户登录?快捷的解决方案是提供一个选项,让他们从“新位置”登录,并使旧会话无效。然后,当您去执行操作时,首先检查会话是否仍然有效。

更好的实现是让会话保持活动状态并指定超时。(即,如果会话已存在x分钟,则使其无效。)然后,你将不会看到来自旧的孤立连接的“幻影登录”-它们会自动过期。

票数 2
EN

Stack Overflow用户

发布于 2009-01-08 08:03:17

这里有两个常见的答案:

  • 如果您尝试登录,并且已经登录,请提出使用轮询/超时来中断(重置)现有的登录
  • -即,让应用程序每2分钟(例如)调用一个方法来更新“上次收到的消息”;如果您在5分钟内(例如)还没有收到某人的消息,则清除

标志

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/423547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档