1時間後に戻ってきましたが、今ではユーザーは自動的にログオフされています
アクションが実行された場合、これはユーザーがログオフしていないことを意味します。[Authorize]
属性は期待どおりに機能します。
あなたの問題は認証とは何の関係もないと思います。使用している ASP.NET セッションに関係しています。フォーム認証 Cookie と ASP.NET セッションは 2 つの完全に異なる概念であることに注意してください。したがって、ユーザーがログインしたときに ASP.NET セッションに何かを保存したと思います。ただし、ASP.NET セッションはデフォルトで 20 分で期限切れになり、フォーム認証 Cookie タイムアウトとは無関係に構成されます。したがって、ユーザー認証 Cookie がまだ有効であり、ユーザーが認証されている間は、セッションが期限切れになったか、Web サーバーが単にアプリケーションをリサイクルし、セッションに保存したすべてが失われたため、セッションが失われました。
これは言われていることですが、この問題を回避するために必要なさまざまな可能性を見てみましょう:
- 私の推奨するアプローチは、セッションを取り除くことです。web.config に入力するだけ
<sessionState mode="Off" />
で、ASP.NET セッションがステートレス アプリケーションに導入するステートフルネスのことは忘れてしまいます。
認証 Cookie が有効かどうかを確認するだけでなく、セッションにまだ値が含まれているかどうかを確認するカスタムの Authorize 属性を記述します。
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)