Prolungare la scadenza della session fino alla chiusura del browser con ASP.NET AJAX

di Cristiano Degiorgis, in ASP.NET 2.0, AJAX, UserScript,

Alzi la mano chi non ha ricevuto almeno una volta la richiesta di evitare che la session scada nel browser!

C'è da premettere che non amo la Session, odio doverne prolungare il timenout, il default, 20 minuti, e che mantenerla in vita sino alla scadenza serve prevalentemente ad assecondare pause caffe' troppo lunghe :-)

Ecco un semplice sistema, basato su ASP.NET AJAX, per mantenere la Session in vita sino a che non viene chiuso il browser.
Il trucco e' molto semplice: creare un timer con Javascript che chiami una procedura server che coinvolga l'oggetto Session.

Occore aggiungere ASP.NET AJAX o gestire manualmente una procedura specifica utilizzando XMLHTTP.

<asp:ScriptManager ID="scriptManager" runat="server">
  <Scripts>
[code lang="html"]    <asp:ScriptReference Path="~/WebServices/Proxy/KeepSessionAlive-Proxy.js" />
  </Scripts>
</asp:ScriptManager>

Quindi creare una procedura server-side che interagisca con l'oggetto Session, ad esempio un webservice:

[WebService(Namespace = "http://aspitalia.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class KeepSessionAlive : System.Web.Services.WebService
{
  public KeepSessionAlive(){}

  [WebMethod(EnableSession=true)]
  public void CallingTime()
  {
    Session["KeepSessionAlive_CallingTime"] = DateTime.Now;
  }
}

A questo punto bisogna aggiungere un blocco di codice client nelle pagine per lanciare la richiesta alla precedente procedura.

[code lang="aspx"]<script type="text/javascript" language="javascript">
  function KeepSessionAlive() {
    setInterval( 'doKeepSessionAlive()', 1000*60 );//ogni minuto verra' effettuata una richiesta che manterra' viva la sessione
  }

  function doKeepSessionAlive() {
  //La seguente function js e' contenuta nel proxy incluso al punto 1
  //Per ottenre il proxy, una volta creato il webservice, effettuate una richiesta di questo tipo http://.../yourwebservice.asmx/js e salvate l'output nel percorso settato in ScriptReference
  //Alternativamente, nel ScriptManager, usate Services aniche' Scripts e puntate direttamente al vostro webservice
    Test.Web.Services.Ajax.KeepSessionAlive.CallingTime();
  }
  
  Sys.Application.add_load(KeepSessionAlive);
</script>

A questo punto potete sbizzarrirvi con le customizzazioni... ad esempio richiedere all'utente di mantenere viva la sessione con un confirm prima di effettuare la chiamata.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi