2010-12-10 15 views
12

Qual è il modo migliore per disconnettere un utente quando una sessione termina o scade?Come disconnettere un utente quando una sessione scade o termina

Grazie per qualsiasi aiuto.

+1

Intendi semplicemente far diventare un utente non autenticato o reindirizzare effettivamente l'utente ad alcuni "Ehi, sei scaduto!" pagina dopo che hanno aspettato troppo a lungo e la loro sessione è scaduta? – Pandincus

+0

Entrambi se possibile? – zSynopsis

+0

al termine della sessione, la richiesta successiva che effettueranno non sarà autenticata. In tal caso la tua pagina può verificarlo al caricamento di una nuova pagina. Per reindirli se sono stati sulla stessa pagina troppo a lungo, ti consigliamo di scrivere javascript sulla pagina che ha un conto alla rovescia che equivale al valore di timeout della sessione. Quando il timer azzera il reindirizzamento, perché la sessione non è valida. (Kinda - un avvertimento è che se stanno esplorando il tuo sito in un'altra scheda - che manterrà la sessione in vita, mentre la prima scheda javascript continuerà a contare) – Prescott

risposta

11

E 'davvero dipende dalla funzionalità desiderata che stai cercando. Presumo che tu stia utilizzando FormsAuthentication.

Ci sono due cose separate è necessario essere preoccupati: il sessione e il cookie FormsAuthentication. A meno che non mi sbagli, entrambi hanno timeout separati.

Se il problema che stai avendo è che la sessione è scaduta, ma l'utente è autenticato ancora, si potrebbe provare una combinazione dei seguenti elementi:

1: Fare in modo il cookie di autenticazione ha lo stesso valore di timeout come la sessione:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: Nella tua Page_Load, controllare se la sessione è scaduta:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Vedi http://www.eggheadcafe.com/articles/20051228.asp per informazioni sul rilevamento di un timeout di sessione)

Se si desidera un'esperienza utente più piacevole, è possibile utilizzare javascript per avviare una sorta di popup dell'interfaccia utente modale dopo X minuti. Questo popup consentirebbe semplicemente a un utente di avviare un clic del pulsante che attiverebbe un postback AJAX sul server, estendendo in tal modo il proprio cookie di autenticazione e di sessione senza dover ricaricare la pagina. Non l'ho mai implementato prima, ma guarda, this guy made an ASP.NET AJAX control!

+0

Grazie Pandincus – zSynopsis

Problemi correlati