Ho raccolto recentemente una domanda su come si potesse redirezionare su una certa pagina l'utente a cui sia scaduta la sessione.
Effettivamente alcune volte nella Session_Start non sempre si hanno a disposizione tutte le informazioni per poter ricostruire i dati di una Session ormai scaduta. Soluzioni alternative certamente ci sono ma volendo scegliere questa strada, ecco una possibile soluzione.
L'evento PreRequestHandlerExecute viene eseguito prima di ogni richiesta di pagina ed ha in più il privilegio di poter accedere alla Session.
Se un valore arbitrario della session non è presente, significa che la session è nuova e quindi devo redirigere l'utente sulla pagina prestabilita (Webform1.aspx nell'esempio).
Nel global.asax.cs:
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
string Uri = HttpContext.Current.Request.Url.AbsoluteUri.ToLower();
if(Uri.EndsWith("WebForm1.aspx".ToLower()))
return;
if(Session["test"] == null)
Response.Redirect("~/Webform1.aspx");
}
I più critici si domanderanno perchè il ToLower() sulla stringa literal. Il motivo è solo un promemoria per chi dovesse metterci una stringa, una funzione o quant'altro. Occhio insomma a non dimenticarsi di confrontare le stringhe con lo stesso 'case'.
Ovviamente nella webform1.aspx.cs è poi necessario inizializzare quel valore in modo arbitrario:
Session["test"] == “1”;
Banale, quasi scontato, ma a volte utile ...