2011-07-07 7 views
5

Necesito contar el número de sesiones pero la dosis no funciona cuando digo si el número de sesiones es 2 y luego hago algo. El siguiente ejemplo es mi código:cuenta el número de sesiones en ASP.net/c#

// count curent session in order to keep two player 
    if (HttpContext.Current.Session.Count == 2) 
    { 
    Response.Redirect("update.aspx"); 
    } 

Coloque el código anterior en el código de detrás. ¿Hay alguna otra manera que puedo decir: si el número de sesiones es 2 else hacer algo ...

+0

La propiedad Count se utiliza para obtener el número de elementos en la colección de estado de sesión. –

+0

el objeto de sesión también contiene algunas sesiones de asp.net, no solo las que ha colocado. ¿Por qué no pones un salto de línea (tecla de acceso directo: F9) y ves el conteo? – iamserious

+0

A veces abrir en 2 ventanas en el mismo navegador (no contará como dos sesiones.A veces incluso desde un navegador diferente puede ocurrir el mismo problema. Abra la página web desde dos sistemas (no estoy seguro; lo siento) – tamilnad

Respuesta

2

Este es el recuento de variables de sesión almacenadas en la sesión para ese usuario (msdn reference) ... no el número de sesiones de usuario que existen actualmente.

Tendrá que almacenar el recuento de la sesión fuera de la sesión en sí ... quizás en la caché de la caché o la aplicación.

Éstos son algunos de SO preguntas para ayudar a implementar esto:

0

Usted puede utilizar WMI para consultar el número de sesiones activas en un una aplicación.

+0

cómo-hacerlo? Cualquier muestra real código sobre ello utilizando * WMI *? Funciona para ** TODOS los casos ** como '' modo es _SQLServer_ y 'InProc'? – Kiquenet

+0

cómo-a? cualquier código de muestra real al respecto usando WMI? Funciona para ** TODOS los casos ** como el modo '' es ** SQLServer e InProc **? 'El modo Session_Start/Session_End tiene el problema de que Session_End solo se llama para sesiones" InProc ", no si las sesiones se almacenan en StateServer o SqlServer .'' –

+0

Tal vez esto funcione para alguien http://www.activexperts.com/admin/scripts/wmi/vbscript/0433/? Por el motivo que sea, esta solución me devuelve cero para cada métrica ... pero esa ma y estar algo mal con mi máquina. Guarde la secuencia de comandos en esta página web como blah.vbs y ejecútela en cmd.exe –

-2

NOTA: este ejemplo es sólo para un programador novato (NO para programadores expertos ASP)

1) Ir a Global.asax.cs archivo e identificar la función de inicio de la aplicación y luego añadir una variable de contador Sesión. Así ...

void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup          
     Application.Add("NOF_USER_SESSION", 0); 

2) Luego, en el mismo torreón archivo Global.asax.cs añadir/reducción de los recuentos de usuario en Sesión de inicio y la función de sesión EndUp respectivamente ... así ...

 void Session_Start(object sender, EventArgs e) 
     { 
      // Code that runs when a new session is started 
      Application["NOF_USER_SESSION"] =   (int)Application["NOF_USER_SESSION"] + 1; 
.. 
.. 
     void Session_End(object sender, EventArgs e) 
     { 
      // Code that runs when a session ends. 
      // Note: The Session_End event is raised only when the sessionstate mode 
      // is set to InProc in the Web.config file. If session mode is set to StateServer 
      // or SQLServer, the event is not raised. 
      Application["NOF_USER_SESSION"] = (int)Application["NOF_USER_SESSION"] - 1; 
.. 
.. 

3) A continuación, utilice esta variable de nivel de aplicación (int)Application["NOF_USER_SESSION"] siempre que sea posible dentro de su programa.

Cuestiones relacionadas