Sto usando ASP.NET MVC. Voglio reindirizzare alla pagina di accesso quando la sessione scade. Come posso raggiungere questo obiettivo? Se sto facendo una chiamata AJAX a un metodo nel controller, se la mia sessione scade anche in quella situazione, desidero reindirizzare alla pagina di accesso.Con ASP.NET MVC reindirizzare alla pagina di accesso quando la sessione scade
risposta
si potrebbe fare questo da 3 modi:
Creare un filtro per le vostre azioni e applicarlo programmazione di un codice OnActionExecuting (prima stata eseguita l'azione), http://www.asp.net/mvc/tutorials/understanding-action-filters-cs
creare una base classe (che eredita dalla classe Controller) e che i controller ereditano da questa. In questa classe potresti sovrascrivere un metodo chiamato OnActionExecuting, come il filtro.
Non utilizzare sessione per l'autenticazione, è possibile utilizzare l'autenticazione Forms e mantenerlo semplice da usare, ti segnalo: http://weblogs.asp.net/fredriknormen/archive/2008/02/07/asp-net-mvc-framework-using-forms-authentication.aspx
A mio parere, la soluzione 3 è meglio di altri. Spero che funzioni per te!
perché è possibile copiare il cookie di sicurezza dei moduli-Autenticazione usarlo per simulare un utente registrato Io uso il seguente attributo per associare l'autenticazione alla durata corrente della sessione.
Per far funzionare l'attributo è necessario impostare la sessione ["utente"] = MyUser all'accesso e chiamare session.abandom() al logout. Non so se il reindirizzamento funziona con chiamate ajax - è qualcosa che devi provare.
[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);
}
}
}
Il reindirizzamento non sembra funzionare per me. Ho un sito mobile MVC che sembra significare che tutto utilizza AJAX. Non sei sicuro di come il reindirizzamento funzioni. –
se applico questo attributo ad una classe, come posso scrivere un attributo invert per applicarlo all'azione? UncheckUserSessionAttribute ad esempio – Wachburn
Penso che questo non sia supportato dal framework MVC. Per quanto ne so valuterà tutti gli attributi del filtro. Non riesco ad immaginare un modo per risolvere il tuo problema. Quindi devi applicarlo a tutti i metodi della tua classe. – Michael
Un'altra soluzione plausibile potrebbe essere trovato qui:
Questo risponde è fortemente basato su Michaels, tranne che funziona ;-)
ho cambiato di prendere una delegare per verificare se la sessione è terminata in modo che possa funzionare in diverse app che potrebbero avere diversi modi per determinarlo e anche la pagina di accesso potrebbe essere diversa in altre app. Nel Global.asax.cs Application_Start() il codice che ho nel mio app è
CheckUserSessionAttribute.CheckSessionAlive = session => (session.GetUser() != null);
CheckUserSessionAttribute.LoginUrl = "~/Account/Login";
Poi la classe di attributo è il seguente
[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();
}
}
dal controller basta aggiungere il [CheckUserSession] attributo sopra la classe o le singole azioni.
- 1. Come reindirizzare alla pagina di accesso quando la sessione è scaduta (ASP.NET 3.5 FormsAuthen)
- 2. GXT: Come portare la pagina di accesso quando scade la sessione
- 3. Come posso reindirizzare a una pagina quando la sessione utente scade?
- 4. Fine sessione in ASP.net MVC
- 5. Scadenza sessione MVC ASP.NET
- 6. ASP.NET MVC impone il reindirizzamento di una richiesta AJAX alla pagina di accesso quando la sessione FormsLogin non è più attiva
- 7. Reindirizzare da HTTPS con ASP.NET MVC App
- 8. reindirizzare alla pagina corrente in ASP.Net
- 9. Quando è possibile, posso accedere alla SESSIONE nel ciclo di vita della pagina ASP.NET MVC?
- 10. MVC 3/Jquery AJAX/sessione scade/C# - Gestione sessione timeout durng chiamata ajax
- 11. AngularJS - Reindirizza alla pagina di accesso e Persistenza dell'ID sessione
- 12. Reindirizzare l'utente alla pagina di accesso personalizzata quando si utilizza Azure AD
- 13. MVC autenticazione OAuth con Salesforce ritorna alla pagina di login
- 14. asp.net timeout sessione mvc
- 15. Reindirizzare la pagina di accesso/registrazione di Wordpress a una pagina di accesso/registrazione personalizzata
- 16. variabili Accesso Asp.Net di sessione in JS
- 17. ASP.NET MVC - Come reindirizzare sicuro?
- 18. Come cancellare la sessione alla disconnessione
- 19. Come reindirizzare all'azione precedente in ASP.NET MVC?
- 20. come reindirizzare alla pagina iniziale
- 21. reindirizzare alla pagina originale dopo l'autenticazione fallita con sicurezza primavera
- 22. Effettuare l'autenticazione dell'API Web restituisce 401 anziché reindirizzare alla pagina di accesso
- 23. Recupera variabili di sessione in ASP.NET MVC 4 (rasoio, vista)
- 24. .ASPXAUTH cookie scade al termine della sessione
- 25. ASP.NET MVC 5: reindirizzamento senza fine alla pagina di accesso utilizzando il modello di sito
- 26. Timeout sessione Silverlight, RIA e ASP.Net
- 27. ui-router Angularjs. Come reindirizzare alla pagina
- 28. timeout variabili di sessione in app asp.net
- 29. Come reindirizzare l'autorizzazione di Ajax su controller alla pagina di accesso? .
- 30. ASP.NET MVC pagina di carico con AJAX
La soluzione 3 è errata. Utilizzando l'autenticazione basata su moduli, l'utente può ancora essere autenticato tramite un cookie ma avere una sessione completamente nuova. Se il tuo controller non lo rileva, puoi avere eccezioni nel tentativo di accedere all'oggetto Session che non è stato configurato dalla pagina di accesso. –
La soluzione 1 è tecnicamente errata. Sebbene sia un filtro, un uso deriva da "AuthorizeAttribute" e "IAuthorizationFilter" e quindi sovrascrive "OnAuthorization" e/o "AuthorizeCore" a seconda della situazione. Questo è il caso fino a MVC 2. –
@ErikPhilips, potresti suggerire un link/esempio per chiarire ulteriormente. Grazie. –