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); }
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)); }
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); }