Domanda

Stiamo seguendo una procedura nel nostro lavoro, mentre lo sviluppo di una pagina web, è quello di legare pagina a una o più variabili di sessione, queste variabili di sessione sono utilizzati solo per quella pagina, di tenere gli oggetti di elaborazione correnti, così mentre la chiusura pagina non c'è bisogno per loro.

Come potrei scartare queste variabili di sessione durante la chiusura pagina? Eventuali suggerimenti per quanto riguarda quella tecnica o il modo per risolvere questo problema?

È stato utile?

Soluzione

Non c'è nessun caso sul lato server che viene generato quando una pagina viene lasciata / chiuso. Anche l'evento Session_End (detto in altre risposte) non viene chiamato quando una pagina viene lasciato, in quanto l'utente può navigare verso altre pagine della stessa applicazione web (e quindi la sessione continuerà ad esistere).

Mi vengono in mente 3 possibili modi per risolvere (o aggirare) questo problema:

1 - utilizzare ViewState per memorizzare i dati con la pagina-scope. Questo è ciò che ViewState è fatto per, e se non avete un sacco di dati, non dovrebbe essere un problema. Se si dispone di un sacco di dati, ricordate, che verrà serializzato / deserializzata e inviato al client / al server per ogni richiesta (che può portare a grandi richieste e quindi cattive prestazioni).

2 - invece di mettere i dati in sessione, metterlo nella Cache (con un basso scorrimento timeout di scadenza). Nella pagina, è possibile accedere ai dati nello stesso modo in cui l'intera sessione, vale a dire i dati = Cache [ "data"], ma devi essere preparato che i dati sono stati rimossi dalla cache (si deve ri-caricarlo ancora una volta da DB per esempio), se il tempo tra due richieste era più grande della data di scadenza.

3 - utilizzare il sul lato client (javascript) onUnload evento, e innescare una certa azione (ad esempio un callback Ajax) per rimuovere il dati della sessione. Ma penso che l'evento onUnload non è attendibile (non saranno licenziati in ogni caso, per esempio quando il browser è terminato da un incidente o con il task manager, o se javascript è disattivato).

Altri suggerimenti

Se si utilizzano le variabili solo per quella pagina, memorizzarli in ViewState . ViewState è adatto per pagina ambito variabili.

Se state usando le sessioni di ASP.NET (che probabilmente sei), è possibile aggiungere un file Global.asax al vostro soluting. In questo evento ci-delegato si trova (se non, crearlo):

protected void Session_End(object sender, EventArgs e)
{

}

.. Qui è possibile cancellare la vostra collezione di sessione.

    protected void Session_End(object sender, EventArgs e)
    {
        Session.Clear();
    }

Questo sarà licenziato quando la sessione scade o quando un utente fa clic Esci:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top