2011-01-28 5 views
1

내가 상속 한 Castle-Monorail 사이트를 수정 중이며 현재 온라인 사용자 목록을 보는 것이 유용 할 것임을 알았습니다. 현재 로그인 한 세션과 로그인하지 않은 세션을 구별 할 수 있도록 사이트의 어느 부분에 누가 액세스 할 수 있는지를 결정하는 필터가 있습니다. 활성 세션 목록을 쉽게 얻을 수있는 방법으로 로그인 한 사용자를 알아낼 수 있습니까?Castle-Monorail 사이트에 대한 현재 세션을 가져 옵니까?

+0

* 모든 * 세션 목록 또는 로그인 한 세션 목록 만 원하십니까? –

+0

현재 모든 세션에 로그인했습니다. – Septih

+0

모노레일은 ASP.NET을 감싸는 래퍼이므로 일반적인 ASP.NET 포럼 (또는 여기에 ASP.NET에 태그를 달았습니다)에이 질문을 던지려면 완벽한 답변으로 더 많은 사람들이 응답 할 수 있습니다. –

답변

0

여기에 내가 함께 결국 해결책이다 :

(의 도움으로 : 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"); 

이제 가장 좋은 장소를 찾아야합니다. 그는에서 위치. 각 기능에서 전화가 약간 귀찮을 수 있습니다!

1

사용자 로그온 정보를 데이터베이스 나 응용 프로그램 변수에 저장하지 않는 한 쉬운 방법이 없다고 생각합니다. 얼마나 많은 활성 세션이 있는지 알 수 없습니다.

관련 문제