2009-04-14 8 views

risposta

0

La risposta dipende parzialmente da dove si memorizza lo stato della sessione. Supponendo di utilizzare l'impostazione predefinita (inproc), è possibile mantenere un elenco degli ID di sessione correnti utilizzando gli eventi Session_Start e Session_End in global.asax.

5

È possibile utilizzare il file Global.asax e impostare la sessione all'evento Session_Start. Vedi sotto

in Global.asax file che si può fare qualcosa di simile:

protected void Session_Start(object sender, EventArgs e) 
{ 
    Session["sid"] = Session.SessionID; 
    Session["sid"] = "Test"; 
} 

Poi, nel tuo WebForm è possibile ottenere l'ID di sessione e valore come qui di seguito

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Write("Session ID is:" + Session.SessionID.ToString()+ "<br/>"); 
    Response.Write("Session value is:" + Session["sid"].ToString()); 
} 

Per informazioni, consultare http://www.dotnetcurry.com/ShowArticle.aspx?ID=126

0

Se si memorizza lo stato della sessione in SQL Server, è anche possibile ottenerlo facilmente da lì.

3

Secondo Dino Esposito ogni sessione viene memorizzato nella cache dell'applicazione e con un po 'di lavoro si può retreive queste informazioni:

DataTable dt = new DataTable(); 
dt.Columns.Add("SessionID", typeof(string)); 
foreach(DictionaryEntry elem in Cache) { 
    string s = elem.Key.ToString(); 
    if (s.StartsWith("System.Web.SessionState.SessionStateItem")) { 
     DataRow row = dt.NewRow(); 
     char[] parms = {':'}; 
     string[] a = s.Split(parms); 
     row["SessionID"] = a[1]; 
     dt.Rows.Add(row); 
    } 
} 
+1

si applica a *** asp.net 4.5.1 ***? –

43

Per ottenere l'id di sessione, fare questo:

// In a user control or page 
string sessionId = this.Session.SessionID; 

// In a normal class, running in a asp.net app. 
string sessionId = System.Web.HttpContext.Current.Session.SessionID; 

Si dovrebbe non è necessario:

  • Effettuare qualsiasi tabella di dati o un ciclo qualsiasi
  • Usa server SQL per lo stato della sessione
  • maniglia Session_Start o Session_End

In uno scenario senza cookie, l'ID di sessione viene creata quando si accede l'oggetto Session per la prima volta. Questo non dovrebbe avere molta importanza, perché nel momento in cui si accede alla proprietà SessionID, si accede all'oggetto di sessione.

Per ulteriori informazioni, guardare in questo:

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx

Nota: Gli esempi di MSDN sono stati scritti da scimmie.

0

Se si desidera memorizzare un elenco delle sessioni correnti in cui si controlla il backing store, in modo da poter memorizzare dati aggiuntivi sul client, è possibile utilizzare un elenco. (Sto scrivendo il seguente esempio dalla cima della mia testa)

Hook nel Application_SessionStart nel file global.asax.cs:

static List<string> sessions = new List<string>(); 
static object sessionLock = new object(); 

void Application_SessionStart() 
{ 
    lock (sessionLock) { 
     sessions.Add(Session.SessionID); 
    } 
} 

void Application_SessionEnd() 
{ 
    lock (sessionLock) { 
     sessions.Remove(Session.SessionID); 
    } 
} 

In alternativa, è possibile utilizzare un dizionario, memorizzare l'ID di sessione come chiave e dati aggiuntivi su quell'utente come valore. Quindi è possibile creare facilmente una pagina che mostri tutte le sessioni utente correnti, ad esempio, per un sito di amministrazione per mostrare le sessioni utente correnti.

SessionEnd verrà chiamato solo se le sessioni sono InProc.