1

継承したキャッスル モノレール サイトを変更していますが、現在オンラインのユーザーのリストを表示すると便利であることがわかりました。現在、誰がサイトのどの部分にアクセスできるかを決定するフィルターがあり、ログインしているセッションとログインしていないセッションを区別できます。ログインしているユーザーを特定できるように、アクティブなセッションのリストを取得する簡単な方法はありますか?

4

2 に答える 2

1

ユーザーのログオン情報をデータベースまたはアプリケーション変数に保存しない限り、アクティブなセッションの数を知ることはできません。

于 2011-01-28T16:37:28.087 に答える
0

これが私が最終的に得た解決策です:

( https://stackoverflow.com/q/1470571/126785および Ken Egozi のコメントの助けを借りて)

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

次に、ログイン時に:

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

あとは、場所を更新するのに最適な場所を見つける必要があります。各関数からの呼び出しは少し面倒かもしれません!

于 2011-11-24T15:46:50.697 に答える