2012-11-06 15 views

risposta

9

Versione corta, n. Non esiste un modo solido di rilevamento di un server se il client ha chiuso il browser. È solo la natura del modello asincrono dello sviluppo web.

Versione lunga, se è davvero, molto importante per te; Metti un po 'di javascript nella pagina che invia un post normale al tuo sito web in background e configura un agente server o servizio che dispone delle sessioni se non riceve questi normali segnali "heartbeat".

È possibile inserire un postback di JavaScript nell'evento di scaricamento() della pagina ma non fare affidamento su di esso, non si attiva sempre.

+0

Un'alternativa all'impostazione di un'azione del controllore o del gestore per l'heartbeat sarebbe semplicemente impostare il timeout della sessione su un minuto dopo l'intervallo di heartbeat. Quindi il browser distribuirà automaticamente la propria sessione poiché il cookie scadrà. –

+0

Si prega di non utilizzare l'approccio javascript, in quanto ciò impedisce alla funzione di timeout di eseguire una delle sue funzioni di sicurezza principali: firmare l'utente se si allontana dal proprio PC. Ti garantisco che se lo fai e ottieni un controllo di sicurezza professionale sul tuo sito, la mancanza di timeout verrà contrassegnata come un problema. – elexis

0

Penso cookies può meglio soddisfare i requisiti qui per la gestione delle sessioni.

significa che i dati di sessione non devono essere conservati sul server e dovrebbe essere con la vostra chiamata, in modo che non devi preoccuparti di cancellare i dati sul server.

+0

Cosa devono fare i cookie con l'evento di chiusura del browser? Se l'utente chiude il browser, non viene generato nulla. Il cookie sarà lì, al cliente, non fare nulla. –

+0

@ RenéWolferinkL: significa che i dati della sessione non devono essere memorizzati sul server e devono essere accompagnati dalla chiamata, in modo da non doversi preoccupare di cancellare i dati sul server. –

1

Questo accade di default ogni volta che si chiude il browser, e questo non è solo per ASP.NET. È per la maggior parte dei linguaggi di programmazione lato server che hanno uno stato di sessione. In sostanza, qualsiasi cookie aggiunto che non specifica una data di scadenza, verrà eliminato quando il browser viene chiuso.

Laddove questo non si applica, è quando si chiude una scheda, che è qualcosa su cui non si ha alcun controllo perché l'evento di chiusura della scheda non verrà rispedito al server Web.

-1

È possibile utilizzare evento Session_End di Global.aspx

//For Specific Session 
Session.Remove("SessionName"); 

//All the Session 
Session.Abandon(); 
+3

iShare: scusa non si attiva al momento della chiusura del browser ... – Saravanan

+0

giusto - l'evento si attiva se il periodo di timeout della sessione (20 minuti per IIS, se non impostato in modo esplicito) viene raggiunto senza ulteriori richieste dal browser. Quindi è una supposizione, e spesso si presenterà qualche volta dopo che un utente smette di usare il tuo sito. – Jon

+0

Viene chiamato solo quando la sessione scade. –

1

In alternativa, è possibile controllare lo stato della sessione precedente si su ogni nuova apertura del browser e può Session.clear() o Session.Abandon() della sessione precedente.

questo farà in modo che ogni volta che si avvia l'applicazione si otterrà una nuova sessione.

  1. utilizzare BasePage nell'applicazione .net.
  2. Controllare session.sessionid sul carico di base.
  3. Ulteriori informazioni su come rilevare una nuova sessione nel basepage. BasePage.Session.Link

Spero che questo aiuti riguarda Shaz

public class BasePage : Page 
{ 

      protected string mySessionId; 

      private CurrentUser _currentUser; 
      public CurrentUser _CurrentUser 
      { 
       get { return ((CurrentUser)HttpContext.Current.Session["myCurrentUser"]); } 
       set { _currentUser = value; } 
      } 


      protected override void OnLoad(EventArgs e) 
      { 

       if (Session["myCurrentUser"] != null) 
       { 
        if (_CurrentUser.ProUser) 
        { 

         mySessionId = Session.SessionID; // it means New Session 

        } 

        if (!mySessionId.IsNullOrDefault() && mySessionId != Session.SessionID) 
        { 
         Session.Abandon(); //Abandon current session and start new one     

        } 
       } 


      } 

} 
0

Yes.First di tutti i browser automaticamente sessione chiaro quando il browser viene chiuso.puoi provare a catturare la chiusura del browser o chiudere l'evento nel browser utilizzando la funzione javascript come on prima di scaricare e scaricare. Soprattutto prima di scaricare l'evento cattura evento di chiusura del browser in chrome, Firefox, IE 11.

Problemi correlati