一个小时后我回来了,到现在用户已经自动下线了
如果执行该操作,这意味着用户没有注销。该[Authorize]
属性按预期工作。
我怀疑您的问题与身份验证无关。它与您正在使用的 ASP.NET 会话有关。请记住,Forms Authentication cookie 和 ASP.NET Session 是两个完全不同的概念。所以我猜你在用户登录时已经在 ASP.NET 会话中存储了一些东西。除了默认情况下 ASP.NET 会话在 20 分钟内到期并且配置独立于表单身份验证 cookie 超时。因此,虽然用户身份验证 cookie 仍然有效并且用户已通过身份验证,但它已经丢失了会话,因为会话过期或 Web 服务器只是回收了您的应用程序,而您存储到 Session 中的所有内容当然都丢失了。
话虽如此,让我们看看您必须解决此问题的不同可能性:
- 我推荐的方法是摆脱 Session。只需放入
<sessionState mode="Off" />
您的 web.config 并忘记 ASP.NET 会话在无状态应用程序中引入的状态。
编写一个自定义 Authorize 属性,除了检查身份验证 cookie 是否有效之外,它还将检查 Session 是否仍然包含值:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
if (!authorized)
{
return false;
}
return httpContext.Session["someKeyThatYouHaveStored"] != null;
}
}
然后使用这个自定义属性:
[MyAuthorize]
public ActionResult Index(string id)