Castle Monorailサイトの現在のセッションを入手しますか?
-
26-10-2019 - |
質問
私が相続した城のモノレールサイトを変更しており、現在のオンラインユーザーのリストを見ると便利であることがわかりました。現在、誰がサイトのどの部分にアクセスできるかを決定するフィルターがあり、セッションでログインしたログオンとセッションでログインしていることを区別できます。アクティブなセッションのリストを取得する簡単な方法はありますか。
解決 2
これが私が終わった解決策です:
(からの助けを借りて: https://stackoverflow.com/q/1470571/126785 とケン・エゴジのコメント)
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");
今、私は場所を更新するのに最適な場所を解決する必要があります。各関数からの呼び出しは少し面倒です!
他のヒント
データベースまたはアプリケーション変数にユーザーログオン情報を保存していない限り、簡単な方法はないと思います。アクティブセッションの数がわからない。
所属していません StackOverflow