public int DamageSession()
        {
            //get the container which stores the dictionary of session items
            var _container = GetInstanceField(_session.GetType(), _session, "_container");

            //retrieve the dictionary of items
            var _sessionItems = (System.Collections.Specialized.NameObjectCollectionBase)GetInstanceField(_container.GetType(), _container, "_sessionItems");

            //get the entries array list inside the dictionary
            var _entriesArray = GetInstanceField(typeof(System.Collections.Specialized.NameObjectCollectionBase), _sessionItems, "_entriesArray");

            //get the object[] array backing up the array list
            var _items = (Object[])GetInstanceField(_entriesArray.GetType(), _entriesArray, "_items");

            //should there be no items in the sesison return -1;
            if (_items == null || _items.Length == 0)
            {
                return(-1);
            }

            //pick a random number from 0 to the count of the _items array list
            Random r           = new Random();
            int    killerIndex = r.Next(0, _items.Length - 1);

            //kill the targetted item
            _items[killerIndex] = null;

            //return the index of the killed item
            return(killerIndex);
        }
Example #2
0
        private SessionStateModule GetModule(HttpSessionState session)
        {
            PropertyInfo      container        = session.GetType().GetProperty("Container", BindingFlags.Instance | BindingFlags.NonPublic);
            IHttpSessionState sessionContainer = (IHttpSessionState)container.GetValue(session, new object[] { });

            FieldInfo stateModule = sessionContainer.GetType().GetField("_stateModule", BindingFlags.Instance | BindingFlags.NonPublic);

            return((SessionStateModule)stateModule.GetValue(sessionContainer));
        }
Example #3
0
        public static Dictionary <string, object> GetKeyValues(HttpSessionState session, bool deleteErrorData)
        {
            var container = session.GetType().InvokeMember(
                "_container",
                BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic,
                null, session, null);

            var items = (SessionStateItemCollection)container.GetType().InvokeMember(
                "_sessionItems",
                BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic,
                null, container, null);

            var sitems = items.GetType().InvokeMember(
                "_serializedItems",
                BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic,
                null, items, null);

            MethodInfo method = sitems.GetType().GetMethod("GetKey", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(int) }, null);

            Dictionary <string, object> dict = new Dictionary <string, object>();

            for (int i = 0; i < items.Count; i++)
            {
                string key = (string)method.Invoke(sitems, new object[] { i });

                object value = null;
                try {
                    value = items[key];
                }
                catch (Exception ex) {
                    value = ex;

                    if (deleteErrorData)
                    {
                        session.Remove(key);
                        System.Threading.Interlocked.Increment(ref DeleteErrorDataCount);
                    }
                }

                dict[key] = value;
            }

            return(dict);
        }