4

MVC でセッション タイムアウトを処理および実装するための最良の方法を知りたいです。ユーザー認証時に「RememberMe」を処理できるようにアプリをセットアップしました。いくつかの変数も格納しますContext.Session["myvar"];

セッションの有効期限が切れたときに問題が発生しましたが、認証 Cookie の有効期限がまだ切れていません。

私が最初に考えたのは、アクション リクエストでセッション統計をチェックすることでした。しかし、それは多くのコードのようです。セッション状態を一度確認するのに適した場所はありますか? セッションタイムアウトを処理する他の方法は何ですか? セッションがタイムアウトしたときに、ユーザーをログイン ページにリダイレクトしたいと考えています。または、ユーザーがまだログインしている場合は、セッション変数を再ロードします。

4

2 に答える 2

11

セッション状態を一度確認するのに適した場所はありますか

確かに、カスタム Authorize 属性は素晴らしい場所のように見えます:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authroized = base.AuthorizeCore(httpContext);
        if (!authroized)
        {
            // the user is not authenticated or the forms authentication
            // cookie has expired
            return false;
        }

        // Now check the session:
        var myvar = httpContext.Session["myvar"];
        if (myvar == null)
        {
            // the session has expired
            return false;
        }

        return true;
    }
}
于 2012-05-08T15:26:11.360 に答える
3

global.asax.cs で、SessionStart ハンドラーを追加できます

protected void Session_Start(object sender, EventArgs e)
{
    if (this.Context.User != null && this.Context.User.Identity != null
        && this.Context.User.Identity.IsAuthenticated)
    {
        // Got user from authentication cookie (remember me).

        // here you can either re-instantiate user in your application/session
        // so he/she will be logged-in automatically (which is remember me functionality)
        // The username is in this.Context.User.Identity.Name

        // Or redirect user to login page if you need manual login
    }
}
于 2012-05-08T15:42:07.530 に答える