Tôi đang sử dụng ASP.NET MVC. Tôi muốn chuyển hướng đến trang đăng nhập khi phiên hết hạn. Làm thế nào tôi có thể đạt được điều này? Nếu tôi đang thực hiện một cuộc gọi AJAX đến một phương thức trong bộ điều khiển thì nếu phiên của tôi hết hạn trong tình huống đó thì tôi cũng muốn chuyển hướng đến trang đăng nhập.Với chuyển hướng ASP.NET MVC đến trang đăng nhập khi phiên hết hạn
Trả lời
bạn có thể làm điều này bằng 3 cách:
Tạo bộ lọc để hành động của bạn và áp dụng nó lập trình một mã trong OnActionExecuting (trước khi hành động được thực hiện), http://www.asp.net/mvc/tutorials/understanding-action-filters-cs
Tạo cơ sở class (kế thừa từ lớp Controller) và làm cho bộ điều khiển của bạn kế thừa từ cái này. Trong lớp này, bạn có thể ghi đè lên một phương thức gọi là OnActionExecuting, giống như bộ lọc.
Không sử dụng phiên cho xác thực, bạn có thể sử dụng hình thức xác thực và giữ cho nó đơn giản để sử dụng, xem xét điều này: http://weblogs.asp.net/fredriknormen/archive/2008/02/07/asp-net-mvc-framework-using-forms-authentication.aspx
Theo tôi, giải pháp 3 là tốt hơn so với khác. Tôi hy vọng nó làm việc cho bạn!
vì có thể sao chép cookie bảo mật của Xác thực biểu mẫu sử dụng nó để mô phỏng người dùng đã đăng ký Tôi sử dụng thuộc tính sau để ràng buộc xác thực cho phiên hiện tại.
Để làm cho Thuộc tính hoạt động, bạn phải đặt phiên ["người dùng"] = MyUser khi đăng nhập và gọi session.abandom() khi đăng xuất. Tôi không biết liệu chuyển hướng có hoạt động với cuộc gọi ajax hay không - đó là điều bạn phải thử.
[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);
}
}
}
Chuyển hướng dường như không hoạt động đối với tôi. Tôi có một trang web di động MVC dường như có nghĩa là mọi thứ đều sử dụng AJAX. Bạn không chắc chắn cách bạn chuyển hướng hoạt động. –
nếu tôi áp dụng thuộc tính này cho một lớp, làm thế nào tôi có thể viết một thuộc tính nghịch đảo để áp dụng nó vào hành động? Bỏ chọnUserSessionAttribute ví dụ – Wachburn
Tôi nghĩ rằng điều này không được hỗ trợ bởi khung MVC. Theo như tôi biết nó sẽ đánh giá tất cả các thuộc tính lọc. Tôi không thể tưởng tượng một cách để giải quyết vấn đề của bạn. Vì vậy, bạn phải áp dụng nó cho mọi phương pháp trong lớp học của bạn. – Michael
Một giải pháp đáng tin cậy có thể được tìm thấy ở đây:
này trả lời là chủ yếu dựa vào Michaels trừ nó hoạt động ;-)
tôi đã thay đổi nó để có một đại biểu để kiểm tra xem phiên đã kết thúc sao cho phiên có thể hoạt động trong các ứng dụng khác nhau có thể có các cách khác nhau để xác định điều này và trang đăng nhập có thể khác trong các ứng dụng khác. Trong Global.asax.cs Application_Start() mã tôi có trong ứng dụng của tôi là
CheckUserSessionAttribute.CheckSessionAlive = session => (session.GetUser() != null);
CheckUserSessionAttribute.LoginUrl = "~/Account/Login";
Sau đó, lớp thuộc tính như sau
[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();
}
}
Từ điều khiển của bạn chỉ cần thêm [CheckUserSession] thuộc tính trên lớp hoặc các hành động riêng lẻ.
- 1. Cách chuyển hướng đến trang Đăng nhập khi Phiên hết hạn (ASP.NET 3.5 FormsAuthen)
- 2. Cách chuyển hướng đến trang đăng nhập sau khi phiên hết hạn trong GWT RPC gọi
- 3. Cách chuyển hướng đến trang Đăng nhập khi Phiên hết hạn trong ứng dụng web Java?
- 4. Chuyển hướng ASP.NET MVC sau khi đăng nhập vào trang mà người dùng đến từ
- 5. GXT: Cách mang trang đăng nhập khi hết hạn
- 6. TYPO3 - Chuyển hướng đến trang đăng nhập khi người dùng không đăng nhập
- 7. Cách chuyển hướng đến URL đăng nhập động trong ASP.NET MVC
- 8. hết hạn trang ASP.Net
- 9. Chuyển hướng đến trang 404 lập trình bằng asp.net MVC
- 10. ASP.Net MVC 3.0 Ajax.BeginForm đang chuyển hướng đến một Trang?
- 11. Kiểm thử đơn vị ASP.Net MVC Ủy quyền thuộc tính để xác minh chuyển hướng đến trang đăng nhập
- 12. Chuyển hướng đến URL trước sau khi đăng nhập - Rails
- 13. ASP.net Đăng với chuyển hướng?
- 14. AngularJS - Chuyển hướng đến trang Đăng nhập và Độ bền của ID phiên
- 15. User.Identity.IsAuthenticated false cho đến khi được chuyển hướng từ trang đăng nhập
- 16. Chuyển hướng trở lại trang sau khi đăng nhập
- 17. ASP.Net MVC Hướng đến Username
- 18. Chuyển hướng đến trang trước sau khi đăng nhập bằng cách sử dụng PHP
- 19. Chuyển hướng đến URL cụ thể sau khi đăng nhập
- 20. ASP.net Chuyển hướng đến trang gọi
- 21. Đăng nhập HTTPS với Spring Security chuyển hướng đến HTTP
- 22. Phiên PHP hết hạn sớm
- 23. Kết thúc phiên trong ASP.net MVC
- 24. chuyển hướng đến trang đăng ký nếu người dùng không đăng nhập được nêu ra
- 25. Đăng/Chuyển hướng/Lấy mẫu trong ASP.NET MVC
- 26. Trang đăng nhập quản trị Django chuyển hướng đến cùng một trang trên thông tin đăng nhập chính xác
- 27. Chuyển hướng sau khi đăng nhập?
- 28. Testing chuyển hướng sau khi đăng nhập với lập mưu
- 29. bình-đăng nhập: Chrome bỏ qua cookie hết hạn?
- 30. Chuyển hướng ASP.NET MVC với kiểu
Giải pháp 3 là sai. Sử dụng xác thực biểu mẫu, người dùng vẫn có thể được xác thực thông qua cookie nhưng có phiên mới. Nếu bộ điều khiển của bạn không bắt được điều này thì bạn có thể có ngoại lệ cố gắng truy cập đối tượng Session mà chưa được cấu hình bởi trang đăng nhập. –
Giải pháp 1 về mặt kỹ thuật là không chính xác. Mặc dù một bộ lọc, một sử dụng bắt nguồn từ 'AuthorizeAttribute' và' IAuthorizationFilter' và sau đó ghi đè lên 'OnAuthorization' và/hoặc' AuthorizeCore' tùy thuộc vào tình huống. Đây là trường hợp tất cả các cách quay trở lại MVC 2. –
@ErikPhilips, bạn có thể vui lòng đề xuất một liên kết/ví dụ để làm rõ thêm. Cảm ơn. –