Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / State / SessionStateUtil.cs / 1305376 / SessionStateUtil.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * SessionStateUtil * */ namespace System.Web.SessionState { using System.Collections; using System.Web; using System.Web.Util; using System.IO; using System.IO.Compression; using System.Xml; using System.Security.Permissions; using System.Collections.Generic; ////// public static class SessionStateUtility { internal const String SESSION_KEY = "AspSession"; // Called by custom session state module if they want to raise Session_End. static public void RaiseSessionEnd(IHttpSessionState session, Object eventSource, EventArgs eventArgs) { HttpApplicationFactory.EndSession(new HttpSessionState(session), eventSource, eventArgs); } // Called by custom session state module static public void AddHttpSessionStateToContext(HttpContext context, IHttpSessionState container) { HttpSessionState sessionState = new HttpSessionState(container); try { context.Items.Add(SESSION_KEY, sessionState); } catch (ArgumentException) { throw new HttpException(SR.GetString(SR.Cant_have_multiple_session_module)); } } static internal void AddDelayedHttpSessionStateToContext(HttpContext context, SessionStateModule module) { context.AddDelayedHttpSessionState(module); } static internal void RemoveHttpSessionStateFromContext(HttpContext context, bool delayed) { if (delayed) { context.RemoveDelayedHttpSessionState(); } else { context.Items.Remove(SESSION_KEY); } } // Called by custom session state module static public void RemoveHttpSessionStateFromContext(HttpContext context) { RemoveHttpSessionStateFromContext(context, false); } // Called by custom session state module static public IHttpSessionState GetHttpSessionStateFromContext(HttpContext context) { return context.Session.Container; } static public HttpStaticObjectsCollection GetSessionStaticObjects(HttpContext context) { return context.Application.SessionStaticObjects.Clone(); } internal static SessionStateStoreData CreateLegitStoreData(HttpContext context, ISessionStateItemCollection sessionItems, HttpStaticObjectsCollection staticObjects, int timeout) { if (sessionItems == null) { sessionItems = new SessionStateItemCollection(); } if (staticObjects == null && context != null) { staticObjects = SessionStateUtility.GetSessionStaticObjects(context); } return new SessionStateStoreData(sessionItems, staticObjects, timeout); } // This method will take an item and serialize it [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] internal static void Serialize(SessionStateStoreData item, Stream stream) { bool hasItems = true; bool hasStaticObjects = true; BinaryWriter writer = new BinaryWriter(stream); writer.Write(item.Timeout); if (item.Items == null || item.Items.Count == 0) { hasItems = false; } writer.Write(hasItems); if (item.StaticObjects == null || item.StaticObjects.NeverAccessed) { hasStaticObjects = false; } writer.Write(hasStaticObjects); if (hasItems) { ((SessionStateItemCollection)item.Items).Serialize(writer); } if (hasStaticObjects) { item.StaticObjects.Serialize(writer); } // Prevent truncation of the stream writer.Write(unchecked((byte)0xff)); } // This will deserialize and return an item. // This version uses the default classes for SessionStateItemCollection, HttpStaticObjectsCollection // and SessionStateStoreData [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] internal static SessionStateStoreData Deserialize(HttpContext context, Stream stream) { int timeout; SessionStateItemCollection sessionItems; bool hasItems; bool hasStaticObjects; HttpStaticObjectsCollection staticObjects; Byte eof; Debug.Assert(context != null); try { BinaryReader reader = new BinaryReader(stream); timeout = reader.ReadInt32(); hasItems = reader.ReadBoolean(); hasStaticObjects = reader.ReadBoolean(); if (hasItems) { sessionItems = SessionStateItemCollection.Deserialize(reader); } else { sessionItems = new SessionStateItemCollection(); } if (hasStaticObjects) { staticObjects = HttpStaticObjectsCollection.Deserialize(reader); } else { staticObjects = SessionStateUtility.GetSessionStaticObjects(context); } eof = reader.ReadByte(); if (eof != 0xff) { throw new HttpException(SR.GetString(SR.Invalid_session_state)); } } catch (EndOfStreamException) { throw new HttpException(SR.GetString(SR.Invalid_session_state)); } return new SessionStateStoreData(sessionItems, staticObjects, timeout); } static internal void SerializeStoreData(SessionStateStoreData item, int initialStreamSize, out byte[] buf, out int length, bool compressionEnabled) { using(MemoryStream s = new MemoryStream(initialStreamSize)) { SessionStateUtility.Serialize(item, s); if(compressionEnabled) { byte[] serializedBuffer = s.GetBuffer(); int serializedLength = (int)s.Length; // truncate the MemoryStream so we can write the compressed data in it s.SetLength(0); // compress the serialized bytes using(DeflateStream zipStream = new DeflateStream(s, CompressionMode.Compress, true)) { zipStream.Write(serializedBuffer, 0, serializedLength); } // if the session state tables have ANSI_PADDING disabled, last )s are trimmed. // This shouldn't happen, but to be sure, we are padding with an extra byte s.WriteByte((byte)0xff); } buf = s.GetBuffer(); length = (int) s.Length; } } static internal SessionStateStoreData DeserializeStoreData(HttpContext context, Stream stream, bool compressionEnabled) { if(compressionEnabled) { // apply the compression decorator on top of the stream // the data should not be bigger than 4GB - compression doesn't work for more than that using(DeflateStream zipStream = new DeflateStream(stream, CompressionMode.Decompress, true)) { return SessionStateUtility.Deserialize(context, zipStream); } } return SessionStateUtility.Deserialize(context, stream); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * SessionStateUtil * */ namespace System.Web.SessionState { using System.Collections; using System.Web; using System.Web.Util; using System.IO; using System.IO.Compression; using System.Xml; using System.Security.Permissions; using System.Collections.Generic; ////// public static class SessionStateUtility { internal const String SESSION_KEY = "AspSession"; // Called by custom session state module if they want to raise Session_End. static public void RaiseSessionEnd(IHttpSessionState session, Object eventSource, EventArgs eventArgs) { HttpApplicationFactory.EndSession(new HttpSessionState(session), eventSource, eventArgs); } // Called by custom session state module static public void AddHttpSessionStateToContext(HttpContext context, IHttpSessionState container) { HttpSessionState sessionState = new HttpSessionState(container); try { context.Items.Add(SESSION_KEY, sessionState); } catch (ArgumentException) { throw new HttpException(SR.GetString(SR.Cant_have_multiple_session_module)); } } static internal void AddDelayedHttpSessionStateToContext(HttpContext context, SessionStateModule module) { context.AddDelayedHttpSessionState(module); } static internal void RemoveHttpSessionStateFromContext(HttpContext context, bool delayed) { if (delayed) { context.RemoveDelayedHttpSessionState(); } else { context.Items.Remove(SESSION_KEY); } } // Called by custom session state module static public void RemoveHttpSessionStateFromContext(HttpContext context) { RemoveHttpSessionStateFromContext(context, false); } // Called by custom session state module static public IHttpSessionState GetHttpSessionStateFromContext(HttpContext context) { return context.Session.Container; } static public HttpStaticObjectsCollection GetSessionStaticObjects(HttpContext context) { return context.Application.SessionStaticObjects.Clone(); } internal static SessionStateStoreData CreateLegitStoreData(HttpContext context, ISessionStateItemCollection sessionItems, HttpStaticObjectsCollection staticObjects, int timeout) { if (sessionItems == null) { sessionItems = new SessionStateItemCollection(); } if (staticObjects == null && context != null) { staticObjects = SessionStateUtility.GetSessionStaticObjects(context); } return new SessionStateStoreData(sessionItems, staticObjects, timeout); } // This method will take an item and serialize it [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] internal static void Serialize(SessionStateStoreData item, Stream stream) { bool hasItems = true; bool hasStaticObjects = true; BinaryWriter writer = new BinaryWriter(stream); writer.Write(item.Timeout); if (item.Items == null || item.Items.Count == 0) { hasItems = false; } writer.Write(hasItems); if (item.StaticObjects == null || item.StaticObjects.NeverAccessed) { hasStaticObjects = false; } writer.Write(hasStaticObjects); if (hasItems) { ((SessionStateItemCollection)item.Items).Serialize(writer); } if (hasStaticObjects) { item.StaticObjects.Serialize(writer); } // Prevent truncation of the stream writer.Write(unchecked((byte)0xff)); } // This will deserialize and return an item. // This version uses the default classes for SessionStateItemCollection, HttpStaticObjectsCollection // and SessionStateStoreData [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] internal static SessionStateStoreData Deserialize(HttpContext context, Stream stream) { int timeout; SessionStateItemCollection sessionItems; bool hasItems; bool hasStaticObjects; HttpStaticObjectsCollection staticObjects; Byte eof; Debug.Assert(context != null); try { BinaryReader reader = new BinaryReader(stream); timeout = reader.ReadInt32(); hasItems = reader.ReadBoolean(); hasStaticObjects = reader.ReadBoolean(); if (hasItems) { sessionItems = SessionStateItemCollection.Deserialize(reader); } else { sessionItems = new SessionStateItemCollection(); } if (hasStaticObjects) { staticObjects = HttpStaticObjectsCollection.Deserialize(reader); } else { staticObjects = SessionStateUtility.GetSessionStaticObjects(context); } eof = reader.ReadByte(); if (eof != 0xff) { throw new HttpException(SR.GetString(SR.Invalid_session_state)); } } catch (EndOfStreamException) { throw new HttpException(SR.GetString(SR.Invalid_session_state)); } return new SessionStateStoreData(sessionItems, staticObjects, timeout); } static internal void SerializeStoreData(SessionStateStoreData item, int initialStreamSize, out byte[] buf, out int length, bool compressionEnabled) { using(MemoryStream s = new MemoryStream(initialStreamSize)) { SessionStateUtility.Serialize(item, s); if(compressionEnabled) { byte[] serializedBuffer = s.GetBuffer(); int serializedLength = (int)s.Length; // truncate the MemoryStream so we can write the compressed data in it s.SetLength(0); // compress the serialized bytes using(DeflateStream zipStream = new DeflateStream(s, CompressionMode.Compress, true)) { zipStream.Write(serializedBuffer, 0, serializedLength); } // if the session state tables have ANSI_PADDING disabled, last )s are trimmed. // This shouldn't happen, but to be sure, we are padding with an extra byte s.WriteByte((byte)0xff); } buf = s.GetBuffer(); length = (int) s.Length; } } static internal SessionStateStoreData DeserializeStoreData(HttpContext context, Stream stream, bool compressionEnabled) { if(compressionEnabled) { // apply the compression decorator on top of the stream // the data should not be bigger than 4GB - compression doesn't work for more than that using(DeflateStream zipStream = new DeflateStream(stream, CompressionMode.Decompress, true)) { return SessionStateUtility.Deserialize(context, zipStream); } } return SessionStateUtility.Deserialize(context, stream); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DecodeHelper.cs
- RecommendedAsConfigurableAttribute.cs
- XmlSerializerNamespaces.cs
- Menu.cs
- XmlSchemaCompilationSettings.cs
- MethodBuilderInstantiation.cs
- NameScopePropertyAttribute.cs
- SystemDiagnosticsSection.cs
- HtmlLink.cs
- ExtenderProvidedPropertyAttribute.cs
- StylusSystemGestureEventArgs.cs
- ArraySegment.cs
- OSFeature.cs
- DispatchWrapper.cs
- HierarchicalDataSourceDesigner.cs
- OleDbDataReader.cs
- KeyedCollection.cs
- ProvideValueServiceProvider.cs
- TypeUnloadedException.cs
- TextShapeableCharacters.cs
- StateMachineExecutionState.cs
- LinkButton.cs
- DrawListViewSubItemEventArgs.cs
- ShaderEffect.cs
- Metafile.cs
- TableCellAutomationPeer.cs
- XmlSchemaDatatype.cs
- RegexCode.cs
- HoistedLocals.cs
- SelectionManager.cs
- ToolStripCodeDomSerializer.cs
- SingleStorage.cs
- ExpressionBindingCollection.cs
- MSAAEventDispatcher.cs
- CacheEntry.cs
- DataServiceConfiguration.cs
- SqlClientWrapperSmiStream.cs
- IdentityModelDictionary.cs
- MenuItemBindingCollection.cs
- DataTableCollection.cs
- DataGridViewTopRowAccessibleObject.cs
- InputReferenceExpression.cs
- WinFormsUtils.cs
- ContainerUIElement3D.cs
- TextTreeNode.cs
- QueryCacheManager.cs
- AccessedThroughPropertyAttribute.cs
- DataServiceRequestException.cs
- BitmapFrame.cs
- XmlResolver.cs
- WebPartConnection.cs
- PartitionedDataSource.cs
- TCPClient.cs
- HtmlTextArea.cs
- LineBreak.cs
- LineInfo.cs
- NominalTypeEliminator.cs
- ReplacementText.cs
- LogicalExpressionEditor.cs
- ItemChangedEventArgs.cs
- Int32Collection.cs
- RangeValuePattern.cs
- SelectedDatesCollection.cs
- PointUtil.cs
- GetReadStreamResult.cs
- StackOverflowException.cs
- ApplicationDirectory.cs
- Wizard.cs
- SmiEventStream.cs
- HttpServerUtilityWrapper.cs
- PlatformNotSupportedException.cs
- WebDescriptionAttribute.cs
- SQLMembershipProvider.cs
- MatrixAnimationBase.cs
- ToolStripItemEventArgs.cs
- Instrumentation.cs
- ProcessModule.cs
- NativeMethods.cs
- TreeNode.cs
- QueryExecutionOption.cs
- PageCatalogPartDesigner.cs
- EntityCommandDefinition.cs
- RadioButtonDesigner.cs
- X509Utils.cs
- ClosableStream.cs
- WebPartRestoreVerb.cs
- RankException.cs
- Exceptions.cs
- LogLogRecordEnumerator.cs
- CardSpaceSelector.cs
- StickyNoteHelper.cs
- TdsRecordBufferSetter.cs
- HtmlForm.cs
- XmlReflectionImporter.cs
- WaitForChangedResult.cs
- _NegoStream.cs
- WebControlParameterProxy.cs
- PenContexts.cs
- TypeBinaryExpression.cs
- FormViewInsertedEventArgs.cs