我有c#mvc web应用程序。根据电子邮件和密码有简单的登录页面。现在我有这样的需要: 当用户登录系统时,相同电子邮件地址的所有活动会话都将注销。 我怎样才能做到这一点?
答案 0 :(得分:2)
您可以使用Session.Abandon()
或Clear()
放弃当前会话,但如果有多个人使用相同的地址登录,则无法解决此问题。
您必须构建该检测;例如,您可以更新代表您的用户的表上的标志,然后在其他用户的会话中定期检查表是否重新登录。或者当用户登录时,在表中创建令牌具有过期日期的数据库表;将该令牌与cookie中的用户相关联。注销或重新登录时,您可以使与该电子邮件地址关联的令牌无效,并且每个用户在尝试访问应用程序时,可能会被您的应用程序拒绝检查令牌是否已过期。
答案 1 :(得分:1)
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