2009-04-14 13 views

Respuesta

0

La respuesta depende parcialmente de dónde almacene el estado de la sesión. Suponiendo que usa el valor predeterminado (inproc), puede mantener una lista de identificadores de sesión actuales usando los eventos Session_Start y Session_End en global.asax.

5

Puede usar el archivo Global.asax y configurar la sesión en el evento Session_Start. Sigue a continuación

en Global.asax archivo que puede hacer algo como esto:

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

Luego, en el formulario Web puede obtener el ID de sesión y valor, como a continuación

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()); 
} 

Para más detalles, véase http://www.dotnetcurry.com/ShowArticle.aspx?ID=126

0

Si está almacenando su estado de sesión en SQL Server, también puede obtenerlo fácilmente desde allí.

3

Según Dino Esposito cada sesión se almacena en caché de la aplicación y con un poco de trabajo que seguir para recuperar esta información:

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

se aplica a *** asp.net 4.5.1 ***? –

43

Para obtener el identificador de sesión, haga lo siguiente:

// 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; 

Usted debe no es necesario:

  • Hacer cualquier tabla de datos o bucle nada
  • Usar servidor SQL para el estado de sesión
  • manija Session_Start o Session_End

En un escenario sin cookies, el identificador de sesión se crea cuando se accede al objeto de sesión por primera vez. Esto no debería importar mucho, porque en el momento en que accede a la propiedad SessionID, se accede al objeto de sesión.

Para obtener más información, ver en esto:

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

Nota: Los ejemplos de MSDN haber sido escrito por los monos.

0

Si desea una forma de almacenar una lista de las sesiones actuales en las que controla la tienda de respaldo, para que pueda almacenar datos adicionales sobre el cliente, puede usar una lista. (Estoy escribiendo el siguiente ejemplo de la parte superior de la cabeza)

gancho en Application_SessionStart en el archivo 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); 
    } 
} 

Como alternativa, se puede usar un diccionario, que almacena el identificador de sesión como clave, y datos adicionales sobre ese usuario como el valor. A continuación, puede crear fácilmente una página que muestre todas las sesiones de usuario actuales, por ejemplo, para que un sitio de administración muestre las sesiones de usuario actuales.

SessionEnd solo se ejecutará si sus sesiones son InProc.

Cuestiones relacionadas