我正在使用ASP.NET MVC。我想在會話過期時重定向到登錄頁面。我怎樣才能做到這一點?如果我正在對控制器中的某個方法進行AJAX調用,那麼如果我的會話在那種情況下過期,我也想重定向到登錄頁面。當會話過期時,ASP.NET MVC重定向到登錄頁面
13
A
回答
15
您可以通過3種方式做到這一點:
創建一個過濾器,你的行動,並將其應用編程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優於其他。我希望這個對你有用!
7
因爲可以複製Forms-Authentication的安全性cookie使用它來模擬註冊用戶我使用以下屬性將認證綁定到當前會話生存期。
要使屬性工作,您必須在登錄時設置會話[「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);
}
}
}
1
另一種可行的解決方案可以在這裏找到:
3
這個答案在很大程度上基於邁克爾斯除了它工作;-)
我改成了坐委託檢查會話是否已結束,以便它可以在不同的應用程序中工作,這些應用程序可能有不同的確定方式,而且登錄頁面可能在其他應用程序中有所不同。在Global.asax.cs中的Application_Start()在我的應用程序代碼中,我已經是
CheckUserSessionAttribute.CheckSessionAlive = session => (session.GetUser() != null);
CheckUserSessionAttribute.LoginUrl = "~/Account/Login";
那麼屬性類是如下
[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();
}
}
從控制器只需添加[CheckUserSession]上面的屬性班級或個人行爲。
相關問題
- 1. Symfony重定向到會話過期後的登錄頁面
- 2. 在會話過期後重定向到登錄頁面
- 3. 當會話cookie在Django中過期時重定向到登錄
- 4. asp.net mvc重定向登錄會話到期
- 5. 會話過期並重定向到登錄頁面後清除登錄字段?
- 6. 自動重定向到登錄當會話過期
- 7. ASP.NET Core在會話超時後未重定向到登錄頁
- 8. 會話超時重定向到登錄頁面在Silverlight
- 9. 重定向到登錄頁面後會話超時
- 10. asp.net重定向到登錄頁面
- 11. 會話在Backbone.js中過期後,如何自動重定向到登錄頁面?
- 12. 會話過期後JSF重定向到登錄頁面拋出ViewExpiredException
- 13. 會話過期後重定向到登錄頁面的最佳做法
- 14. 登錄頁面重定向
- 15. 重定向到https登錄頁面
- 16. 「如何檢測會話超時並重定向到登錄頁面在ASP.NET中」
- 17. 重定向到登錄頁面/彩盒
- 18. 如何在用戶會話過期時重定向到頁面?
- 19. MVC 3登錄頁面重定向
- 20. 會話到期時通過AJAX導航到登錄頁面
- 21. ASP.NET MVC身份驗證重定向到區域登錄頁面
- 22. 重定向到IFrame的登錄頁面
- 23. 如何重定向到登錄頁面是會話experies
- 24. 如果會話從AJAX請求到期,重定向到登錄頁面
- 25. C#-Asp.net MVC主頁/索引頁面重定向到登錄頁面
- 26. 會話在MVC到期時立即重定向到另一個視圖(登錄頁面)
- 27. ASP.NET登錄頁面重定向問題
- 28. 自舉登錄按鈕不會重定向到登錄頁面
- 29. Spring Security&ExtJS - 在會話超時時重定向到登錄頁面
- 30. 沒有重定向到登錄頁面時,會話超時與ajax調用
解決方案3是錯誤的。使用表單身份驗證,用戶仍然可以通過cookie進行身份驗證,但有一個全新的會話。如果你的控制器沒有捕獲到這個,那麼你可能會有異常,試圖訪問尚未由登錄頁面配置的會話對象。 – 2013-05-27 18:48:53
解決方案1在技術上不正確。雖然有一個過濾器,一個使用來自`AuthorizeAttribute`和`IAuthorizationFilter`,然後根據情況重寫`OnAuthorization`和/或`AuthorizeCore`。這是一直回到MVC 2的情況。 – 2015-02-16 02:32:21