2012-12-25 13 views
6

Ho un'applicazione in cui sono utilizzati circa 20 http generic handler per ajax call.
Ho usato IReadOnlySessionState per accedere alla sessione nei miei gestori. Tutto funziona correttamente.
Gestire il timeout della sessione nel gestore HTTP generico

Ma quando la sessione scade il gestore restituisce alcuni html mentre reindirizza alla pagina predefinita e nella pagina di risposta viene inviata la pagina HTML di default.

Per risolvere questo problema.
Ho controllato la variabile di sessione nel gestore e se è nullo l'ho scritto

context.Response.Write("logout") 

E ho il check-in jQuery Ajax tempo è il logout o qualsiasi altra cosa.

$.ajax({ 
      url: "myhandler.ashx", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { checklogout(data); $("#loading").hide(); }, 
      error: function() { $("#loading").hide(); }, 
      async: false 
     }); 


Se è il logout quindi ho usato posizione per reindirizzare alla pagina di login.
Sto usando form-authentication per autenticare l'utente.

C'è un approccio migliore per il controllo e il reindirizzamento alla pagina di accesso utilizzando la chiamata jquery-ajax.

+1

Probabilmente sarebbe meglio per restituire un appropriato [codice di stato HTTP] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html), come * 401 Non autorizzato * dal gestore (e magari creare un unico gestore di base in modo che non ripeti la logica). Puoi cercare questo valore nelle tue opzioni AJAX centrali ('$ .ajaxsetup'), quindi il codice da controllare deve solo andare in un posto. È sulla falsariga di ciò che stai cercando? –

risposta

2

Hai i gestori in una directory che controlla automaticamente tramite l'autenticazione di asp.net.

Cosa devo fare è di non lasciare automaticamente il controllo da parte del l'autenticazione asp.net dal programma di installazione che in web.config in modo che la chiamata al gestore verrà fatto etere l'utente è connesso in etere non, e dentro i gestori lo farò verificarlo, se l'utente che chiama quel gestore ha la sessione e l'autenticazione.

Quindi nel caso in cui l'utente non ha avuto l'autenticazione di leggere tale gestore torno una bandiera semplice alla mia chiamata ajax, quindi riconoscere e rendere reindirizzamento, ad esempio come:

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

Sembra essere una buona idea. Ma quando 'data' non ha la proprietà' redirectToLogin' darà un'eccezione 'java-script' o no. Inoltre, se utilizzo '' nel mio file webconfig ci sarà qualche minaccia per la sicurezza, anche se controllerò la sessione utente all'interno di tutto il gestore. –

+1

@krshekhar Puoi semplicemente restituire una stringa come "ko" o un'altra bandiera, questo è facile da risolvere. – Aristos

Problemi correlati