Asp.net Impostare in fase di esecuzione la gestione della sessione

Un semplice articolo che illustra una tecnica di come gestire la scadenza della sessione.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

Nel file web.config,  è possibile impostare la durata della scadenza della sessione, in questo breve articolo, vedremo come impostare a run time la gestione della sessione, e nel caso che scade tale sessione, visualizzare una pagina di avviso.
Si riporta il frammento di codice relativo al file web.config la parte relativa alla sessione.
Come si vede, tramite il tag sessionestate, possiamo impostare la modalità (se database o no) la connessione, e la durata.

 <sessionState
   mode="SQLServer"
   sqlConnectionString="data source=NomeServer;initial catalog=aspstate;user id=UserName;password=Password"
   cookieless="false" allowCustomSqlDatabase="true"
   timeout="20" />

Creazione del progetto.

Dopo aver aggiunto nel progetto una master page e tre pagine (una visualizzare un messaggio di sessione scaduta) nella master page, inseriamo nella parte del markup HTML, il tag head impostato a livello di server.
Come riportato qui di seguito.

<head runat="server" id="PageHead">

Stesura di codice

Fatto ciò passiamo in visualizzazione codice, nella pagina master page, si crea una proprietà  denominata SessionDurataMinuti, la quale rileva dal webconfig la durata della sessione.
Si crea una proprietà nella quale si imposta la pagina in cui verrà visualizzato il messaggio di sessione scaduta.
Sempre restando nella master page, si effettua la sovrascrittura dell’evento OnPreRender, in modo che impostiamo nell’intestazione (tramite il metodo add della proprietà control dell’oggetto Head)  la durata e la pagina relativa alla scadenza della sessione.

public int SessionDurataMinuti
    {
        get { return Session.Timeout; }
    }
    //proprietà che rileva il percorso della pagina per la scadenza della sessione
    public string SessioneScadutaUrl
    {
       
        get {
            string Url = string.Concat(Request.ApplicationPath != "/" ? Request.ApplicationPath : string.Empty, "/SessioneScaduta.aspx");
            return Url;
            }
    }
    //renderizzo alla pagina di sessione scaduta
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        this.PageHead.Controls.Add(new LiteralControl(
            String.Format("<meta http-equiv='refresh' content='{0};url={1}'>",
            SessionDurataMinuti*60, SessioneScadutaUrl)));
    }

Conclusioni

L'articolo ha voluto fornire una tecnica per la gestione della sessione, molto utile nel caso che si costruiscono portali in cui è richiesto l'accesso.