我的公司已经分包了一些Web开发,他们创建的ASP.NET站点有一些我觉得有问题的功能。该网站的一部分是登录和“记住我”功能。登录网站时,他们可以选择“记住我”。登录后,注销的唯一方法是清除本地缓存并删除该站点创建的任何cookie。 (他们有一个Log Out链接,但它没有做任何事情)。所以基本上,一旦你登录,你就终身登陆了。
我告诉他们这是错误的,并且用户明确的“注销”应始终终止用户会话并删除任何类型的缓存日志信息。
所以我的问题是: 登录“记住我”功能是否有标准?
修改 所以,重申我的问题具体细节。我不是问你如何记录用户。对我来说完全有道理,当你退出时会杀死用户会话和任何cookie。
我的问题是有任何情况,而当用户单击“注销”按钮时,它什么都不做。换句话说,如果用户登录并检查“记住我”按钮,用户是否应该永远登录,除了清除用户缓存之外无法注销?这对我来说似乎很奇怪,但我们雇佣的承包商似乎与早晨的太阳升起一样正常。
答案 0 :(得分:2)
我与OpenId和MVC有类似的问题所以我找到了这个片段:
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
Session.Abandon();
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
return RedirectToAction("Index", "Home");
}
这将清除会话和cookie,即使它们被FormsAuthentication标记为持久性,我认为在记住检查时会发生这种情况,希望它有所帮助!
更新:
记住我功能只是让你不会得到会话超时并在一段时间后自动注销。退出应该真的退出用户。