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 在同一用户登录后注销所有活动会话的主要内容,如果未能解决你的问题,请参考以下文章