私はASP.NET MVCを使用しています。セッションが終了するとログインページにリダイレクトしたいどうすればこれを達成できますか?コントローラのメソッドへのAJAX呼び出しを行っている場合、セッションがその状況で期限切れになった場合でも、ログインページにリダイレクトします。あなたは3つの方法でこれを行うことができますASP.NET MVCを使用すると、セッションが終了するとログインページにリダイレクトされます
答えて
:
は、ベースを作成し、あなたのアクションにフィルタを作成し、(アクションが実行されて前に)OnActionExecutingのコードをプログラミングすることを適用し、http://www.asp.net/mvc/tutorials/understanding-action-filters-cs
クラス(Controllerクラスから継承)を作成し、コントローラを継承させます。このクラスでは、フィルタのようにOnActionExecutingというメソッドを上書きできます。
はこの見て、あなたが使用するフォーム認証を使用し、それをシンプルに保つことができ、認証のためのセッションを使用しないでください。私の意見ではhttp://weblogs.asp.net/fredriknormen/archive/2008/02/07/asp-net-mvc-framework-using-forms-authentication.aspx
を、溶液3は、他よりも優れています。私はそれがあなたのために働くことを望む!
フォーム認証のセキュリティクッキーをコピーして登録ユーザーをシミュレートできるので、次の属性を使用して認証を現在のセッションの有効期間にバインドします。
属性を動作させるには、ログイン時にsession ["user"] = MyUserを設定し、ログアウト時にsession.abandom()を呼び出す必要があります。 リダイレクトがajaxコールで動作するかどうかはわかりません。これは試してみるべきことです。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class CheckUserSessionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpSessionStateBase session = filterContext.HttpContext.Session;
var user = session["User"];
if (((user == null) && (!session.IsNewSession)) || (session.IsNewSession))
{
//send them off to the login page
var url = new UrlHelper(filterContext.RequestContext);
var loginUrl = url.Content("~/Account/LogOff");
session.RemoveAll();
session.Clear();
session.Abandon();
filterContext.HttpContext.Response.Redirect(loginUrl, true);
}
}
}
リダイレクトが私にとってうまくいかないようです。私はすべてがAJAXを使用しているように見えるMVCモバイルサイトを持っています。リダイレクトをどのように機能させるかは不明です。 –
この属性をクラスに適用すると、それをアクションに適用するためにどのようにinvert属性を記述できますか? UncheckUserSessionAttribute(例: – Wachburn
)これはMVCフレームワークでサポートされていないと思います。私が知る限り、すべてのフィルタ属性を評価します。私はあなたの問題を解決する方法を想像することはできません。だからクラスのすべてのメソッドに適用する必要があります。 – Michael
別のもっともらしい解決策がここで見つけることができます:それは私が取るためにそれを変更;-)
を作品以外
この回答は重くマイケルズに基づいていますセッションが終了したかどうかを確認するデリゲート。異なるアプリで動作する可能性があります。さまざまな方法があり、ログインページも他のアプリとは異なる場合があります。 Global.asax.csのApplication_Start()で私のアプリでは、私が持っているコードは、ちょうど[CheckUserSession】上記の属性を追加するには、コントローラから
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class CheckUserSessionAttribute : ActionFilterAttribute
{
public static String LoginUrl { get; set; }
public delegate bool CheckSessionDelegate(HttpSessionStateBase session);
public static CheckSessionDelegate CheckSessionAlive;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpSessionStateBase session = filterContext.HttpContext.Session;
if ((CheckSessionAlive == null) || (CheckSessionAlive(session)))
return;
//send them off to the login page
var url = new UrlHelper(filterContext.RequestContext);
var loginUrl = url.Content(LoginUrl);
session.RemoveAll();
session.Clear();
session.Abandon();
filterContext.HttpContext.Response.StatusCode = 403;
filterContext.HttpContext.Response.Redirect(loginUrl, false);
filterContext.Result = new EmptyResult();
}
}
を次のように
CheckUserSessionAttribute.CheckSessionAlive = session => (session.GetUser() != null);
CheckUserSessionAttribute.LoginUrl = "~/Account/Login";
が次に属性クラスがありますクラスまたは個々のアクション。
- 1. fosuserbundleを使ってセッションを終了すると、ログインページにリダイレクトする方法は?
- 2. セッションが終了したらログインページにリダイレクトする方法は?
- 3. Spring Securityログインページにリダイレクトされ、認証成功後にセッションが終了する
- 4. セッション終了のASP.net MVC
- 5. asp.net mvcページが数日後にログインページにリダイレクトされる
- 6. セッションが終了するとGlobal.asaxのlogin.aspxページにリダイレクトする方法
- 7. ASP.NET MVC:セッションを終了し、「Remember me」でログインを強制する
- 8. ASP.NET MVC - パラメータを指定したアクションがログインページにリダイレクトされています。
- 9. codeigniterセッションが終了しないときに終了する
- 10. ASP.Netログインページにリダイレクトする
- 11. リダイレクト()を使用するとセッションIDが変更される
- 12. Laravel 5.4認証セッションが終了した後にログインページに戻る
- 13. ドメイン名が適用されると、ASP.NETアプリケーションは常にログインページにリダイレクトされます。
- 14. セッションが完了するとセッションがクリアされます
- 15. ブラウザまたはタブを閉じるとAsp.Netセッションが終了する
- 16. アプリケーションがasp.net mvcで終了するときにコードを実行する方法
- 17. HttpUnauthorizedResultを生成するとASP.Net(MVC)がログにリダイレクトされますか?
- 18. セッション終了後CORSでエラーが発生し、oauth2サーバーにリダイレクトされます。
- 19. ブラウザが閉じられるとOmniauthセッションが終了する
- 20. wwwを変更するとセッションが終了します
- 21. セッションが終了した後にログインページを表示
- 22. Asp.Net MVCとセッション
- 23. セッションが終了したときに、JBossのログインページへのリダイレクトを無効にするにはどうすればよいですか?
- 24. CookieAuthentication - ExpireTimeSpanが終了したらログインページにリダイレクトするにはどうすればよいですか?
- 25. symfonyは、セッションが終了したときのデフォルトのリダイレクトを防止します。
- 26. asp.netコアアプリケーションとアングルアプリケーションでAzure ADセッションが終了しました
- 27. ASP.NET Azure webappは頻繁にログインページにリダイレクトされます
- 28. セッションが終了するとSparkseeがクラッシュする
- 29. Codeigniter:セッションの終了後にホームページにリダイレクト
- 30. PHPセッションがタイムアウトすると、ページ全体がリダイレクトされます。
解決策3が間違っています。フォーム認証を使用すると、ユーザーはCookieを使用して認証できますが、まったく新しいセッションができます。コントローラがこれをキャッチしないと、ログインページで設定されていないセッションオブジェクトにアクセスしようとすると例外が発生する可能性があります。 –
解決策1は技術的に正しくありません。フィルタは、「AuthorizeAttribute」および「IAuthorizationFilter」から派生し、状況に応じて、OnAuthorizationおよび/またはAuthorizeCoreをオーバーライドします。これは、MVC 2に戻るすべてのケースです。 –
@ErikPhilips、さらに明確にするためのリンク/例をお勧めしますか?ありがとう。 –