HI, 我做在C#(2.0)的Windows应用程序和SQL2005 Database.The网络应用ERP溶液通信通过使用Database.I正常技术用于用户登录和注销,保持一个状态位。我的问题是,当我的应用程序因任何其他原因而中断用户状态可能不会改变。这将导致用户无法在下次登录。如何解决此问题?你能给任何用户操作的新技术吗?用户登录技术C#运应用
回答
如果你的目的是要禁止不同计算机上的一个用户名的共享,凭有效的密码登录后,登录该计算机上的唯一令牌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地址,或哈希在操作系统设置任何东西。
伪代码:
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
如何维持一个会话,每个登录跟踪用户登录的?快速而肮脏的解决方案是提供一个选项,让他们从“新位置”登录并使旧会话失效。然后,当您执行操作时,请首先检查会话是否仍然有效。
更好的实现是保持会话活着,并指定超时。 (即,如果该会议是X-分钟的时候,而无效。)然后,你将不会看到“幻影登录”从旧孤立的连接 - 他们自动失效。
这里有两个共同的答案:
- 如果您尝试登录,并且已经登录,提供突破(重置)现有登录
- 使用轮询/超时 - 即有该应用每2分钟调用一次方法(例如)更新“最后一次听到”;如果您在5分钟内未收到任何人的讯息(例如),则清除标记
谢谢.... 我明白了,但连续检查会让我的应用变慢?数据库放置在net.Hop你有更多的想法。 – Anoop 2009-01-08 08:25:18
为什么限制用户可以登录的次数?在Windows中,通常启动应用程序的多个实例。
我必须承认,我在我的Windows应用程序也有只有一个用户被允许的一部分。要查看是否有其他用户连接,我使用类似Marc的轮询算法。有一个强制输入的选项。
锁记录每分钟一次,两分钟的更新是不是资源密集型的(除非你有成千上万的用户)。
- 1. OpenID与非技术人员使用的网站的自定义用户登录
- 2. 应用级复制技术
- 3. 应用规划技术
- 4. 移动应用技术
- 5. C++技术新手
- 6. 在C#中使用客户端服务器技术的Windows Store应用程序
- 7. SonarQube:无法创建用户技术
- 8. 如果用户关闭浏览器,是否有任何技术可以终止用户登录会话?
- 9. 使用推技术
- 10. 什么GUI技术用于C#游戏应用程序?
- 11. Web技术如何用于C++应用程序GUI?
- 12. Win32 API:与其他用户一样运行进程的用户模拟技术?
- 13. Houseparty应用程序流媒体技术
- 14. 应用级负载均衡技术
- 15. 移动应用技术的信息
- 16. GUI应用程序中的Web技术
- 17. 10。我应该使用哪些技术?
- 18. Android Facebook SDK 4.0登录:用户登录Facebook应用时出错
- 19. 用curl登录dropbox(用户登录)
- 20. 应用程序用户和SQL登录
- 21. 以登录用户身份运行cronjob
- 22. Joomla:用户登录后运行javascript
- 23. 红宝石技术门户
- 24. 客户端Java Web技术
- 25. 如何运行非技术性启动的技术部门?
- 26. 大型Web应用程序的客户端技术
- 27. 登录用C
- 28. C# - 用户登录只检查用户名的最新记录
- 29. C#使用SQL登录应用程序
- 30. C#中的别名技术?
我做的Windows应用程序没有Web应用程序。 – Anoop 2009-01-08 08:21:53
@Anoop:会话不是Web特定的。登录到Windows的用户也可以称为会话 – GvS 2009-01-08 08:49:22
您能否给我一些更多的想法或关于会话的链接?我对此没有太多的想法。 – Anoop 2009-01-08 08:59:42