119 messaggi dal 26 febbraio 2007
Ciao a tutti,


dovrei implementare un meccanismo di pulizia di alcuni dati temporanei su SQL Server.

Non vorrei usare i trigger e volevo sapere se secondo voi si poteva catturare l'evento di fine sessione di un utente (la pulizia deve essere fata per utenti che avevano fatto la login), in modo da eliminare alcune tabelle SQL.

Esiste un qualche evento che cattura la fine si una sessione? O comunque avete altri suggerimenti?


Grazie
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,
potresti usare il servizio IMemoryCache di ASP.NET Core, anziché la sessione.
Infatti, quando poni un oggetto in cache, hai anche l'opportunità di indicare del codice che verrà eseguito alla scadenza. Si chiama "post eviction callback".

Quindi il codice da usare sarebbe questo:

//Mi creo una chiave che rappresenti l'oggetto cache di questo utente
string chiaveCache = "NomeDellUtente-NomeOggetto";

//Recupero l'oggetto dalla cache (oppure lo creo se non esisteva ancora)
//Qui la variabile memoryCache mi identifica il servizio IMemoryCache che
//avevo ricevuto grazie alla dependency injection
object oggetto = memoryCache.GetOrCreate(chiaveCache, entry => { //Questa lambda viene eseguita se l'oggetto non era già in cache
        
  //L'oggetto non verrà rimosso dalla cache finché l'utente continua a leggerlo
  //almeno una volta ogni 20 minuti (praticamente lo stesso principio della session).
  entry.SetSlidingExpiration(TimeSpan.FromMinutes(20));
  entry.RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) => {
                //Qui elimini le tabelle dal database in base ai parametri di questa lambda
  });
  //TODO: qui dovrai recuperare dal database l'oggetto da mettere in cache
  return new object();
});


ciao,
Moreno
Modificato da BrightSoul il 23 giugno 2019 12:21 -

Enjoy learning and just keep making
119 messaggi dal 26 febbraio 2007
ottima soluzione.

grazie mille :)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.