Exemple #1
0
        private void Kick_Inactive_Users(int pTimeOut)
        {
            List <int>    user_list       = new List <int>();
            List <string> ip_list         = new List <string>();
            List <string> session_id_list = new List <string>();
            int           dummy           = -1;

            try
            {
                //kick inactive sessions first
                foreach (int u in ActiveUsersDict.Keys)
                {
                    foreach (string ip in ActiveUsersList(u).Keys)
                    {
                        foreach (string s in ActiveUsersList(u)[ip])
                        {
                            if (SessionActivityInfo.ContainsKey(s) && TimedOut(SessionActivityInfo[s], pTimeOut, ref dummy))
                            {
                                user_list.Add(u);
                                ip_list.Add(ip);
                                session_id_list.Add(s);
                            }
                        }
                    }
                }

                for (int i = 0; i <= user_list.Count - 1; i++)
                {
                    Remove_Active_User(user_list[i], session_id_list[i], ip_list[i]);
                }
            }
            catch (Exception)
            {
            }
        }
Exemple #2
0
        //used when session end called gFrom_br global.asa and refreshes the list if the user did not went through logout page (i.e. timed out etc)
        public void Remove_Active_User_From_Session_End(string pSessionId, string pIPAddress)
        {
            Application.Lock();

            int user_id_to_remove = int.MinValue;

            try
            {
                foreach (int user_id in ActiveUsersDict.Keys)
                {
                    Dictionary <string, List <string> > user_id_dict = ActiveUsersList(user_id);

                    if (user_id_dict.ContainsKey(pIPAddress))
                    {
                        if (user_id_dict[pIPAddress].Contains(pSessionId))
                        {
                            user_id_dict[pIPAddress].Remove(pSessionId);

                            if (user_id_dict[pIPAddress].Count == 0)
                            {
                                //if we removed last session id for this ip, remove the ip as well
                                user_id_dict.Remove(pIPAddress);
                            }

                            if (user_id_dict.Keys.Count == 0)
                            {
                                //if we removed last ip for this user, remove the user
                                user_id_to_remove = user_id;
                            }

                            break; // TODO: might not be correct. Was : Exit For
                        }
                    }
                }

                if (user_id_to_remove > 0)
                {
                    ActiveUsersDict.Remove(user_id_to_remove);
                }

                if (SessionActivityInfo.ContainsKey(pSessionId))
                {
                    SessionActivityInfo.Remove(pSessionId);
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                Application.UnLock();
            }
        }
Exemple #3
0
        //used when a user logs out
        public void Remove_Active_User(int pUserId, string pSessionId, string pIPAddress)
        {
            Application.Lock();

            try
            {
                if ((ActiveUsersList(pUserId) == null) == false)
                {
                    if (ActiveUsersList(pUserId).ContainsKey(pIPAddress))
                    {
                        if (ActiveUsersList(pUserId)[pIPAddress].Contains(pSessionId))
                        {
                            ActiveUsersList(pUserId)[pIPAddress].Remove(pSessionId);
                        }

                        if (ActiveUsersList(pUserId)[pIPAddress].Count == 0)
                        {
                            //if we removed last session id for this ip, remove the ip as well
                            ActiveUsersList(pUserId).Remove(pIPAddress);
                        }

                        if (ActiveUsersList(pUserId).Keys.Count == 0)
                        {
                            //if we removed last ip for this user, remove the user
                            ActiveUsersDict.Remove(pUserId);
                        }
                    }
                }

                if (SessionActivityInfo.ContainsKey(pSessionId))
                {
                    SessionActivityInfo.Remove(pSessionId);
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                Application.UnLock();
            }
        }
Exemple #4
0
        public bool Check_If_User_Active(int pUserId, string pSessionId, string pIPAddress, bool No_Activity_Update = false)
        {
            if ((ActiveUsersList(pUserId) == null) == false)
            {
                if (ActiveUsersList(pUserId).ContainsKey(pIPAddress))
                {
                    if (ActiveUsersList(pUserId)[pIPAddress].Contains(pSessionId))
                    {
                        if (SessionActivityInfo.ContainsKey(pSessionId))
                        {
                            if (No_Activity_Update == false)
                            {
                                SessionActivityInfo[pSessionId] = DateTime.Now;
                            }
                        }

                        return(true);
                    }
                }
            }

            return(false);
        }
Exemple #5
0
        public void Add_Active_User(int pUserId, string pSessionId, string pIPAddress, bool pAllowMultipleSessionsFromSameIP)
        {
            List <string> ips_to_kick = new List <string>();
            bool          is_new      = false;

            Application.Lock();

            if (ActiveUsersDict.ContainsKey(pUserId) == false)
            {
                is_new = true;
                ActiveUsersDict.Add(pUserId, new clsUserSessionData());
            }

            Dictionary <string, List <string> > dictUserStatus = ActiveUsersList(pUserId);

            if (is_new == false)
            {
                //request gFrom_br dif. IP addresses
                foreach (string ip in dictUserStatus.Keys)
                {
                    //kicks out all existing entries for this user gFrom_br other IP addresses
                    if (ip != pIPAddress)
                    {
                        ips_to_kick.Add(ip);
                    }
                }

                foreach (string ip in ips_to_kick)
                {
                    dictUserStatus.Remove(ip);
                }

                //same IP different sessions (optional)
                if (pAllowMultipleSessionsFromSameIP == false)
                {
                    ips_to_kick = new List <string>();
                    foreach (string ip in dictUserStatus.Keys)
                    {
                        List <string> sess_ids_to_kick = new List <string>();
                        foreach (string sess_id in dictUserStatus[ip])
                        {
                            if (pSessionId != sess_id)
                            {
                                sess_ids_to_kick.Add(sess_id);
                            }
                        }

                        if (sess_ids_to_kick.Count > 0)
                        {
                            foreach (string sess_id_to_kick in sess_ids_to_kick)
                            {
                                dictUserStatus[ip].Remove(sess_id_to_kick);
                            }
                            if (dictUserStatus[ip].Count == 0)
                            {
                                ips_to_kick.Add(ip);
                            }
                        }
                    }

                    foreach (string ip in ips_to_kick)
                    {
                        dictUserStatus.Remove(ip);
                    }
                }
            }

            //if this IP address does not exist, add it
            if (dictUserStatus.ContainsKey(pIPAddress) == false)
            {
                dictUserStatus.Add(pIPAddress, new List <string>());
            }

            dictUserStatus[pIPAddress].Add(pSessionId);

            if (SessionActivityInfo.ContainsKey(pSessionId) == false)
            {
                SessionActivityInfo.Add(pSessionId, DateTime.Now);
            }
            else
            {
                SessionActivityInfo[pSessionId] = DateTime.Now;
            }

            Application.UnLock();
        }