2016-06-24 9 views
6

In Asp.net WebForms c'è un evento chiamato Seesion_End() in global.asax, ogni volta che la sessione è scaduta o si chiama Session.Abandon() questo gestore di eventi viene eseguito, ho bisogno di avere un comportamento simile in asp.net Core, è possibile?C'è Session.Abandon() asp.net Core

+0

penso che si dovrebbe riformulare la domanda. Difficile rispondere! – Thomas

+1

Hai provato Session.Clear()? – Tratcher

+0

Ho bisogno di catturare l'evento quando la sessione è automaticamente scaduta, c'è qualche motivo per catturare quell'evento o c'è qualche evento? –

risposta

0

Il docs copre la maggior parte di questo. Il timeout di sessione è impostato in questo modo:

services.AddSession(options => 
{ 
    options.IdleTimeout = TimeSpan.FromSeconds(10); 
}); 

Ma dal momento che esiste è un cookie, il cookie ha anche una data di scadenza. Quindi, se lo IdleTimeout scade, la sessione scade. Se il cookie scade, la sessione è sparita. Se il cookie viene eliminato, la sessione è sparita.

La chiamata Session.Clear() rimuove il contenuto della sessione, ma mantiene la sessione intatta (ovvero il cookie non viene eliminato) come descritto nello source.

+0

in Asp.net WebForms c'è qualcosa chiamato Seesion_End() in global.asax, ogni volta che la sessione è scaduta o si chiama Session.Abandon() questo gestore di eventi viene eseguito, ho bisogno di avere un comportamento simile in asp.net Core, È possibile? –

+0

Quindi non c'è modo di invalidare a livello di programmazione una sessione, ad es. quando l'utente utilizza un pulsante di disconnessione? Quale sarebbe il modo consigliato per invalidare una sessione oltre a impostare il timeout di inattività molto basso. Inoltre quale valore può essere controllato per assicurare che il timeout abbia effettivamente invalidato la sessione? Sembra in qualche modo che l'implementazione di Session in .net Core non sia completamente implementata, o mi manca qualcosa qui. – vm370

+0

@ vm370 Come già detto da Tratcher, il modo consigliato per invalidare una sessione dal codice è chiamare 'Session.Clear()'. C'è qualche ulteriore discussione qui: [Session Issue 27] (https://github.com/aspnet/Session/issues/27) – TallMcPaul

0

Si potrebbe cancellare la sessione semplicemente chiamando:

HttpContext.Session.Clear();