在MVC应用程序中,用户已登录Machine1。同一个用户也登录了Machine2。那时,我想从Machine1注销用户,并希望从Machine1清除会话。怎么做到这一点?
如果您提供任何样本申请/代码,将不胜感激。
请帮忙。提前致谢。 请帮忙。提前谢谢。
答案 0 :(得分:0)
Session.Abandon()销毁会话并触发Session_OnEnd事件。
Session.Clear()只删除Object中的所有值(内容)。具有相同密钥的会话仍然存在。
因此,如果您使用Session.Abandon(),则会丢失该特定会话,并且用户将获得新的会话密钥。例如,当用户注销时,您可以使用它。
使用Session.Clear(),如果您希望用户保持在同一会话中(例如,如果您不想让他重新登录)并重置所有会话特定数据。
答案 1 :(得分:0)
为了首先实现所需的功能,我建议用户成功登录后,将SessionId CurrentDateTime和UserId保存到数据库中的某个特殊表中,例如“LoginHistory”。然后在
中的global.asax中protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e);
从“LoginHistory”中取出DateTime排序的前1行以获取当前用户ID,并将数据库中的sessionId值与当前用户的sessionId进行比较。
如果它们不同,则注销当前用户
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
答案 2 :(得分:0)
在您的退出中使用此操作可能会帮助您
Session.Clear();
或者
session["YourSessionKey"]=null;
答案 3 :(得分:0)
以下是使用哪种方法进行kill会话的一些场景。
Session.Remove(yoursession);
- >从会话状态集合中删除项目。
Session.RemoveAll()
- >从会话集合中删除所有项目。
Session.Clear()
- >从会话集合中删除所有项目。注意:Clear和RemoveAll之间没有区别。 RemoveAll()在内部调用Clear()。
Session.Abandon()
- >取消当前会话。
根据您的要求,这样会更好
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
如果CookiesSupported为false,SignOut方法将从cookie或URL中删除表单身份验证票证信息。您可以将SignOut方法与RedirectToLoginPage方法结合使用,将一个用户注销,并允许其他用户登录。
请参阅 LINK