Pregunta

Estoy modificando un sitio de cola de moneda de castillo que he heredado y descubrí que sería útil ver una lista de usuarios actualmente en línea. Actualmente hay filtros que determinan quién puede acceder a qué partes del sitio para que pueda distinguir las sesiones de inicio de sesión de las sesiones no registradas. ¿Existe una manera fácil de obtener una lista de sesiones activas para que pueda resolver quién está iniciado?

¿Fue útil?

Solución 2

Aquí está la solución con la que terminé:

(Con ayuda de: https://stackoverflow.com/q/1470571/126785 y los comentarios de Ken Egozi)

En Global.asax.cs:

private static readonly object padlock = new object();
private static Dictionary<string,SessionData> sessions = new Dictionary<string,SessionData>();
public static Dictionary<string, SessionData> Sessions
{
    get { lock (padlock) { return sessions; } }
}

public struct SessionData
{
    public string Name { get; set; }
    public int AccountId { get; set; }
    public string CurrentLocation { get; set; }
}

protected void Session_Start(object sender, EventArgs e)
{
    Sessions.Add(Session.SessionID, new SessionData());
}

protected void Session_End(object sender, EventArgs e)
{
    Sessions.Remove(Session.SessionID);
}

public static void SetSessionData(string sessionId, int accountId, string name, string currentLoc)
{
    Sessions.Remove(sessionId);
    Sessions.Add(sessionId, new SessionData { AccountId = accountId, CurrentLocation = currentLoc, Name = name });
}

public static void SetCurrentLocation(string sessionId, string currentLoc)
{
    SessionData currentData = Sessions[sessionId];
    Sessions.Remove(sessionId);
    Sessions.Add(sessionId, new SessionData { AccountId = currentData.AccountId, CurrentLocation = currentLoc, Name = currentData.Name });
}

Luego al iniciar sesión:

Global.SetSessionData(((HttpSessionStateContainer)Session.SyncRoot).SessionID,account.Id,account.Name,"Logged In");

Ahora solo necesito resolver el mejor lugar para actualizar la ubicación. ¡Las llamadas de cada función podrían ser un poco agotador!

Otros consejos

Creo que no hay una manera fácil, a menos que esté almacenando su información de inicio de sesión de usuario en la base de datos, o una variable de aplicación, no puede saber cuántas sesiones activas hay.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top