MVC 在同一用户登录后注销所有活动会话

Posted

技术标签:

【中文标题】MVC 在同一用户登录后注销所有活动会话【英文标题】:MVC logout all active sessions after same user login 【发布时间】:2017-05-10 07:06:28 【问题描述】:

我有 c# mvc web 应用程序。根据电子邮件和密码有简单的登录页面。现在我有这样的需求: 当用户登录系统时,相同电子邮件地址的所有活动会话都将注销。 我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用Session.Abandon()Clear() 放弃当前会话,但如果有多个人使用相同的地址登录,则不会解决此问题。

您必须在其中构建该检测;例如,您可以更新代表您的用户的表上的标志,然后在其他用户的会话中定期检查表是否重新登录。或者当用户登录时,在数据库表中创建一个带有截止日期;将该令牌与 cookie 中的用户相关联。注销或重新登录时,您可以使与该电子邮件地址关联的令牌无效,并且当每个用户尝试访问应用程序时,您的应用程序可能会拒绝检查令牌是否已过期。

【讨论】:

【参考方案2】:

Abandon 方法应该可以工作 (MSDN):

Session.Abandon();

如果您想从会话中删除特定项目,请使用 (MSDN):

Session.Remove("YourItem");

如果你只想清除一个值,你可以这样做:

Session["YourItem"] = null;

如果要清除所有键,请执行以下操作:

Session.Clear();

如果这些都不适合你,那就是有问题了。我会检查您在哪里分配值,并在您清除值后验证它没有被重新分配。

简单检查:

Session["YourKey"] = "Test";  // creates the key
Session.Remove("YourKey");    // removes the key
bool gone = (Session["YourKey"] == null);   // tests that the remove worked

【讨论】:

以上是关于MVC 在同一用户登录后注销所有活动会话的主要内容,如果未能解决你的问题,请参考以下文章

会话超时后失效

如果会话过期,如果没有活动并重定向登录页面,则烧瓶注销

注销问题 MVC3,C#

如何从管理员端注销所有活动的登录用户

如何限制用户多次登录

如何在 mvc 5 中知道 OWIN cookie/用户会话即将到期