내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-09 04:50

제목

[ASP.NET] 현재 사이트에 로그인중인 유저 활성화되어 있는 세션 리스트 얻어오기.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private System.Web.SessionState.SessionStateItemCollection getActiveSession(string UserID)
{
            object obj = typeof(HttpRuntime).GetProperty("CacheInternal", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null, null);
            object[] obj2 = (object[])obj.GetType().GetField("_caches", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(obj);
            for (int i = 0; i < obj2.Length; i++)
            {
                System.Collections.Hashtable c2 = (System.Collections.Hashtable)obj2[i].GetType().GetField("_entries", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(obj2[i]);
                foreach (System.Collections.DictionaryEntry entry in c2)
                {
                    object o1 = entry.Value.GetType().GetProperty("Value", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(entry.Value, null);
                    if (o1.GetType().ToString() == "System.Web.SessionState.InProcSessionState")
                    {
                        System.Web.SessionState.SessionStateItemCollection sess = (System.Web.SessionState.SessionStateItemCollection)o1.GetType().GetField("_sessionItems", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(o1);
                        if (sess != null)
                        {
                            if (sess["UserId"!= null && sess["UserId"].ToString() == UserID)
                            {
                                return sess;
                            }
                        }
                    }
                }
            }
 
            return null;
}
cs

해당 sess세션 개체를 이용해서 강제로 로그아웃 시킬 수 있다.

출처1

출처2