2009-04-02 10 views
6

Devo implementare la funzionalità di auto-logout in uno dei miei progetti e non riesco a capire dove iniziare a cercare idee ma SO.Asp.net: implementazione della funzionalità di disconnessione automatica

Ciò che mi serve è che l'applicazione reindirizzi l'utente alla pagina di accesso se la sessione utente è scaduta. Per favore dimmi come dovrebbe essere il mio approccio per affrontare questo requisito.

problema dichiarazione: Se l'utente lascia il sistema per più di n minuti in un dato esempio di log-in, il sistema li deve registrare automaticamente.

risposta

6

Ciò è stato ottenuto dal seguente senso:

1) Salvare il time-stamp di ogni richiesta (server e ajax escluso il controllo della sessione richiesta AJAX) al server in una sessione var.

2) Eseguire il polling del server tramite una funzione JS utilizzando ajax a intervalli frequenti e verificare se la differenza di orario tra il timestamp della sessione e il tempo di richiesta ajax è maggiore del valore di timeout della sessione quindi disconnettere l'utente corrente e restituire un bool per quella richiesta Ajax.

3) Reindirizzare la pagina corrente alla pagina di accesso se la bool restituita è vera.

+2

Dovresti contrassegnarlo come la risposta per salvare le persone che ci passano il tempo –

1

Leggere la documentazione MSDN all'indirizzo http://msdn.microsoft.com/en-us/library/ms972429.aspx

+0

so che stato di sessione è voglio solo reindirizzare l'utente alla pagina di accesso quando scade! – renegadeMind

+0

Non hai letto l'intera pagina, eh! Leggi la sezione 'Esempio di applicazione dello stato della sessione' nel link sopra. Modifica il metodo "CheckSession" e invece della riga "span1.InnerHtml =" NOTHING, SESSIONE DATI SESSIONE! "" - aggiungi il codice per il reindirizzamento alla tua pagina. – sangupta

0

Dal momento che non si sa da dove cominciare, potete trovare questo articolo utile 4guys: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Modifica

suona come l'jQuery timer può essere utile se si desidera reindirizzare a un URL dopo che è trascorso un periodo di tempo noto (es. il periodo di scadenza della sessione).

Spero che questo aiuti.

+0

conosco i lavori di autenticazione; come posso aiutarmi? Ti preghiamo di comprendere che l'utente non interagirà con il sito e che l'app lo reindirizzerà alla pagina di accesso al termine della sessione! Sarà una cosa da lato cliente! – renegadeMind

+0

Forse consideri di riscrivere la tua domanda per renderla più chiara alle persone che sono disposte a trascorrere del tempo ad aiutarti. –

+0

beh pensavo che la parola auto-logout fosse auto-esplicativa; Immagino che non lo sia! – renegadeMind

14

Passando ai commenti tanto quanto la domanda, non sono sicuro che tu stia cercando qualcosa che effettui il logout dell'utente dopo un certo periodo di tempo indipendentemente dall'attività o solo dopo un periodo di inattività.

Se sei felice di utilizzare lo standard ASP.NET mechanisms, questo può essere fatto per voi, senza lavori importanti:

Impostare il tuo membership provider.

Assicurarsi che il vostro authentication section definisce una loginUrl:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" /> 
</authentication> 

È possibile impostare un timeout diverso da quello predefinito di 30 minuti con l'attributo "timeout" sulla forms element:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" timeout="15"/> 
</authentication> 

Questo sarà il login l'utente dopo 15 minuti di inattività sul tuo sito (con il browser aperto senza "heartbeat" di javascript o se trascorrono 15 minuti su un altro sito).

Negare l'accesso agli utenti anonimi

<authorization> 
    <deny users="?" /> 
</authorization> 

Allora sì che i dati di accesso, la registrazione e le pagine di password eventualmente dimenticati sono accessibili a tutti gli utenti utilizzando il location Element:

<location path="Logon.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<location path="Register.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<!-- etc --> 

In questo modo, quando l'autenticazione di un utente il cookie scade e verrà reindirizzato all'URL specificato nell'elemento loginUrl della pagina dei moduli.


Se non stai utilizzando i meccanismi di ASP.NET standard, allora si sarebbe probabilmente meglio l'attuazione di una "pagina di base" tipo di modello.

Creare una nuova classe che eredita da System.Web.UI.Page che verificherà lo stato di accesso dell'utente e, se non sono registrati/scaduti, li reindirizzerà alla pagina di accesso.

Nelle pagine che devono essere bloccate, invece di ereditare da System.Web.UI.Page, si eredita dalla classe della pagina di base (un esempio di questo tipo di installazione per fare qualcosa di simile - controllare l'impostazione su ogni pagina) può essere visto in my answer here


la pagina di accesso avrà probabilmente bisogno di avere qualche fotogramma busting JS in esso per saltare di nuovo fuori dalla iFrame:

if (top!=self.parent){ 
    top.location=self.parent.location; 
} 

Oppure stai dicendo che premendo "indietro" possono ancora vedere le tue pagine attraverso la cache del browser? In questo caso avrete bisogno di giocare in giro con le intestazioni Cache su ogni pagina:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Ok, bene, in questo caso avrete anche bisogno di un oggetto Timer JS per eseguire una Posizione. Sostituisci per la vostra pagina di login - hanno questo in un controllo utente in ogni pagina (o, meglio ancora, nella tua pagina master) per reindirizzare automaticamente l'utente dopo n minuti:

<script type="text/javascript"> 
    setTimeout('location.Replace("/login.aspx")', 900000); 
</script> 

il tempo è espresso in millisecondi, quindi questa volontà spostali in 15 minuti, e non c'è bisogno di ottenere l'intero framework jQuery per questo.

Si potrebbe anche voler guardare nel tag meta refresh:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" /> 

che costringerà il browser per aggiornare la pagina di accesso dopo 15 minuti (di questo uno in secondi).

+0

Questa è la mia dichiarazione di probabilità: se l'utente lascia il sistema per più di n minuti in una determinata istanza di accesso, il sistema dovrebbe disconnetterli automaticamente. Mi dispiace se la domanda posta non è stata inquadrata correttamente. – renegadeMind

+0

Se si sta utilizzando l'autenticazione basata su form, impostare l'attributo timeout su "n" minuti e il loro token di autenticazione scadrà dopo "n" minuti di inattività - una finestra del browser lasciata aperta o si spostano su un altro sito per quel momento . –

+0

Ho aggiunto alcuni dettagli per includere l'impostazione del timeout, oltre a parlare della possibilità di modificare le intestazioni della cache per le pagine. –

Problemi correlati