找到一个解决办法:
原理是在session中保存LastLoginDate的时间值。操作时再跟提取的Membership.GetUser().LastLoginDate值进行比较,如果不一样就把这个登录注销掉。这样就保证只有以这个账户最后登录的用户,之前登录的都被注销掉。
具体做法是使用login控件登录,login控件名称是Login1,添加Login1_LoggedIn事件:
Code Snippet
protected void Login1_LoggedIn(object sender, EventArgs e)
{
Session["mySessionTime"] = Membership.GetUser(Login1.UserName).LastLoginDate;
}
然后我是在master页面的Page_Load事件中判断:
Code Snippet
protected void Page_Load(object sender, EventArgs e)
{
if (Session["mySessionTime"] == null || Membership.GetUser() == null || (DateTime)Session["mySessionTime"] != Membership.GetUser().LastLoginDate)
{
FormsAuthentication.SignOut();
}
}
看似没有什么问题,请各位看看有没有漏洞或有没有其他更好的办法。
补充一下,这个方法即使在登录时勾选了“下次记住我”也能让该用户旧登录失效。即保存在cookie内的登录信息失效。