2013-02-13 18 views
10

I provider di autenticazione, repository e memorizzazione nella cache in ServiceStack forniscono un modo semplice per aggiungere sessioni di accesso a un'applicazione Web senza quasi alcun codice aggiuntivo. Ho scoperto che il timeout di sessione per un provider di autenticazione può essere configurato, ad esempio:Come anticipare il timeout della sessione in ServiceStack

new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) } 

Ciò fornisce una scadenza dal punto di accesso. Se stiamo sviluppando un sistema sicuro che deve disconnettere un utente dopo un breve periodo di tempo, lo cambieremo dal valore predefinito di 2 settimane a qualcosa come nell'esempio sopra riportato. Ma questo ha il problema che a 10 minuti dall'accesso l'utente verrà espulso indipendentemente dal fatto che stiano ancora interagendo con l'applicazione.

C'è un modo semplice per dire al fornitore di sessione per estendere il tempo di scadenza quando i servizi sono chiamati?

Idealmente ci consentirebbe di estendere la sessione per specifici servizi/richieste (in modo che la sessione venga estesa solo quando l'utente interagisce attivamente con l'applicazione e quindi i servizi interrogati possono essere ignorati).

Aggiornamento

Sulla base della risposta data da mythz ora abbiamo una soluzione semplice che fornisce il livello di controllo abbiamo bisogno per extending the ResponseFilterAttribute.

+2

Questa non è una risposta alla domanda, ma il termine è "scorrevole". Es. Cache scorrevole, timeout della sessione scorrevole, ecc. – Matthew

risposta

10

ServiceStack non supporta ancora "Scadenza sessione scorrevole". In pratica, è necessario reimpostare la voce della cache di sessione su ogni richiesta corretta. per esempio, si potrebbe avere un filtro di risposta (dato che sono effettuate solo per le richieste autenticate), che ri-salva la sessione che avrà l'effetto di ampliare la sua vita in tempo per il momento di scadenza:

var userSession = httpReq.GetSession(); 
httpReq.SaveSession(userSession, slidingExpiryTimeSpan); 

Se si conosce quale provider di caching stai usando, ad es Redis è possibile aggiornare manualmente il timeout di scadenza senza rileggere la voce, ad esempio:

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); 
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}" 
+0

Grazie. Forse una funzione per SS in futuro sarebbe un attributo che è possibile aggiungere a una funzione di richiesta di servizio che gli dice esplicitamente di far scorrere la scadenza, quindi il comportamento predefinito non lo sarebbe. – Dan

+0

Sì, penso che l'opzione 'EnableSlidingExpiration' possa funzionare. – mythz

+2

Nella speranza che sia utile per gli altri, [ecco la soluzione] (http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack) Sono andato con basato su mythz suggerimenti. – Dan

Problemi correlati