Estoy usando ASP.NET MVC. Quiero redireccionar a la página de inicio de sesión cuando caduque la sesión. ¿Cómo puedo conseguir esto? Si estoy haciendo una llamada AJAX a un método en el controlador, entonces si mi sesión caduca en esa situación también quiero redireccionar a la página de inicio de sesión.Con ASP.NET MVC redirigir a la página de inicio de sesión cuando la sesión caduque
Respuesta
usted puede hacer esto por 3 maneras:
Crear un filtro a los actos y aplicarlo programación de un código en OnActionExecuting (antes ha ejecutado la acción), http://www.asp.net/mvc/tutorials/understanding-action-filters-cs
Crear una base de clase (heredando de la clase Controller) y hacer que sus controladores hereden de este. En esta clase, podría sobreescribir un método llamado OnActionExecuting, como el filtro.
No utilizar para la autenticación de sesión, puede utilizar la autenticación de formularios y que sea sencillo de usar, mira esto: http://weblogs.asp.net/fredriknormen/archive/2008/02/07/asp-net-mvc-framework-using-forms-authentication.aspx
En mi opinión, la solución 3 es mejor que otra. ¡Espero que te sirva!
porque es posible copiar la cookie de seguridad de la Autenticación de formularios usarla para simular un usuario registrado. Uso el siguiente atributo para vincular la autenticación a la vigencia de la sesión actual.
Para que el atributo funcione, debe establecer la sesión ["user"] = MyUser al iniciar sesión y llamar a session.abandom() al cerrar la sesión. No sé si la redirección funciona con llamadas ajax; eso es algo que debes probar.
[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);
}
}
}
El redireccionamiento no parece funcionar para mí. Tengo un sitio móvil MVC que parece significar que todo usa AJAX. No estoy seguro de cómo obtener el redireccionamiento para trabajar. –
si aplico este atributo a una clase, ¿cómo puedo escribir un atributo invertido para aplicarlo a la acción? UncheckUserSessionAttribute por ejemplo – Wachburn
Creo que esto no es compatible con el framework MVC. Por lo que sé, evaluará todos los atributos de filtro. No puedo imaginar una forma de cómo resolver tu problema. Entonces debes aplicarlo a todos los métodos en tu clase. – Michael
Otra solución plausible se puede conocer aquí:
Esto responde se basa en gran medida en Michaels, excepto que funciona ;-)
lo cambié a tomar una delegue para verificar si la sesión ha finalizado para que pueda funcionar en diferentes aplicaciones que pueden tener diferentes formas de determinar esto y también la página de inicio de sesión puede ser diferente en otras aplicaciones. En el Global.asax.cs Application_Start() el código que tengo en mi aplicación es
CheckUserSessionAttribute.CheckSessionAlive = session => (session.GetUser() != null);
CheckUserSessionAttribute.LoginUrl = "~/Account/Login";
A continuación, la clase de atributo es el siguiente
[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();
}
}
Desde su controlador sólo tiene que añadir la [CheckUserSession] atribuir anteriormente la clase o las acciones individuales.
- 1. Cómo redirigir a la página de inicio de sesión después de que la sesión caduque en GWT Llamada RPC
- 2. ASP.NET MVC redirigir después del inicio de sesión a la página de donde provino un usuario
- 3. Cómo redirigir a la página de inicio de sesión cuando la sesión ha expirado (ASP.NET 3.5 FormsAuthen)
- 4. Cierre de sesión automático una vez que la sesión caduque
- 5. Redirigir la página de inicio de sesión/registro de Wordpress a una página de inicio de sesión/registro personalizada
- 6. ASP.NET MVC Expiración de la sesión
- 7. Cómo redirigir a la página de inicio de sesión cuando la sesión ha expirado en la aplicación web Java?
- 8. Redirigir a una página después de un inicio de sesión
- 9. TYPO3 - Redirigiendo a la página de inicio de sesión cuando el usuario no ha iniciado sesión
- 10. Cómo redirigir a una URL de inicio de sesión dinámica en ASP.NET MVC
- 11. Cómo redirigir a la misma página después de iniciar sesión
- 12. Inicio de sesión único ASP.NET MVC
- 13. ¿Cómo puedo redireccionar a una página cuando caduque la sesión del usuario?
- 14. FormsAuthentication redirigir a la página de inicio de sesión al visitar la raíz del sitio web
- 15. ASP.NET MVC obliga a una solicitud AJAX a ser redireccionada a la página de inicio de sesión cuando la sesión de FormsLogin ya no está activa
- 16. inicio de sesión único en asp.net
- 17. Spring Security: Redirigir a la página de inicio de sesión si la autenticación falló
- 18. GXT: Cómo traer la página de inicio de sesión cuando la sesión expira
- 19. ASP.NET MVC: cómo mostrar un error no autorizado en la página de inicio de sesión?
- 20. Redirigir la página después de iniciar sesión en Yii framework
- 21. Asp.Net MVC no tiene estilo y está predeterminado en la página de inicio de sesión
- 22. Redirigir a la página de inicio de sesión en lugar de la página de índice en Yii
- 23. ¿Cómo pasar la página de inicio de sesión con Wget?
- 24. ¿Redirigir después del inicio de sesión?
- 25. Asp.Net MVC y sesión
- 26. Redirigir lejos de HTTPS con la aplicación ASP.NET MVC
- 27. ASP.NET MVC 2 + jQuery lightbox + inicio de sesión
- 28. Inicio de sesión único con la aplicación web ASP.Net
- 29. Iniciando sesión sin mostrar una página de inicio de sesión
- 30. cómo redirigir a la página de inicio
La solución 3 es incorrecta. Al usar la autenticación de formularios, el usuario aún puede ser autenticado a través de una cookie, pero tiene una nueva sesión. Si su controlador no detecta esto, puede tener excepciones al intentar acceder al objeto Session que no ha sido configurado por la página de inicio de sesión. –
La solución 1 es técnicamente incorrecta. Aunque es un filtro, un uso se deriva de 'AuthorizeAttribute' y' IAuthorizationFilter' y luego anula 'OnAuthorization' y/o' AuthorizeCore' según la situación. Este es el caso desde MVC 2. –
@ErikPhilips, podría sugerir un enlace/ejemplo para aclarar. Gracias. –