2

我使用 C# 开发了一个 ASP.NET 网站。还有一个简单的身份验证模块。用户可以简单地提交表单并成为会员。

问题区域:

说这个场景;如果我以管理员身份登录当然有一些唯一的用户名和密码,那么不应该有任何其他用户能够使用相同的身份验证信息登录。我明确表示每个用户帐户只能登录一次。

当然,我在网上冲浪并找到了一些不错的就在这里。(我当然尝试了8分的答案)。实际上,它工作正常。但是,Session.Abandon();并没有清除Session["UsersLoggedIn"].

问题:当用户退出会话时,会话很清晰,很好。但是当它再次登录少于会话过期持续时间时,他失败了!原因是,Application["UsersLoggedIn"]仍然有一些价值,因此 Login 方法中的 if 语句假定用户已经登录。我该如何解决这个问题?

请问有什么想法吗?

谢谢

4

2 回答 2

2

这可能有助于构建解决方案。以下链接显示了如何执行您所说的操作(在 ASP.NET MVC 中),除了此解决方案与您需要的解决方案之间的区别如下:用户 Bob 从他的 PC 登录。另一个用户,使用“Bob”的相同用户 ID 从另一个设备(不同的会话 ID)登录。第一个会话被杀死,同时允许第二个会话继续存在。根据您的说法,我相信您需要相反的行为-当用户 ID 已经登录时,不允许同一用户 ID 的第二个实例登录,对吗?我相信您应该能够采用此示例并将其修改为您需要它做的事情。

这是内置成员的自定义实现(我知道您说过您不想使用内置成员,但我认为您可以从下面的帖子中获得一些有用的信息)。

当同一个用户 ID 尝试在多台设备上登录时,如何终止另一台设备上的会话?

于 2013-06-24T16:01:23.247 回答
0

请尝试调试事件。可能在“Session_End”之前调用了清除 Session 的方法,导致无法从 Application 中存储的集合中删除 UserLoggedIn。(我建议从会员提供者那里取名字,而不是在会话中拖它。)

于 2013-06-24T16:10:41.747 回答