Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / State / SessionStateUtil.cs / 1 / 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.Xml;
using System.Security.Permissions;
using System.Collections.Generic;
///
/// [To be supplied.]
///
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
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
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
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) {
MemoryStream s = null;
try {
s = new MemoryStream(initialStreamSize);
SessionStateUtility.Serialize(item, s);
buf = s.GetBuffer();
length = (int) s.Length;
}
finally {
if (s != null) {
s.Close();
}
}
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NavigationProperty.cs
- OracleConnectionFactory.cs
- CodeIndexerExpression.cs
- BackgroundWorker.cs
- TimeManager.cs
- SegmentInfo.cs
- DataSourceHelper.cs
- DataSourceXmlSubItemAttribute.cs
- AsmxEndpointPickerExtension.cs
- Mapping.cs
- CredentialCache.cs
- ColumnHeaderConverter.cs
- HostProtectionException.cs
- TableItemProviderWrapper.cs
- AncestorChangedEventArgs.cs
- Expressions.cs
- SmtpNtlmAuthenticationModule.cs
- WebPartMovingEventArgs.cs
- WebDescriptionAttribute.cs
- LinqDataSourceDeleteEventArgs.cs
- XPathSelectionIterator.cs
- BitmapEffectGroup.cs
- ArgumentNullException.cs
- ProfileService.cs
- FaultCallbackWrapper.cs
- ItemChangedEventArgs.cs
- ModelItemCollectionImpl.cs
- TextRange.cs
- Setter.cs
- MsmqTransportSecurity.cs
- AppDomainManager.cs
- __FastResourceComparer.cs
- CharKeyFrameCollection.cs
- CertificateManager.cs
- MailWebEventProvider.cs
- BindingList.cs
- CodeArrayIndexerExpression.cs
- XmlSchemaSimpleTypeUnion.cs
- WebPartZone.cs
- HostVisual.cs
- HandleExceptionArgs.cs
- ControlParser.cs
- WindowsScroll.cs
- EventRecord.cs
- SafeTimerHandle.cs
- LayoutInformation.cs
- AuthenticationServiceManager.cs
- XComponentModel.cs
- Regex.cs
- TextEditorParagraphs.cs
- ByteFacetDescriptionElement.cs
- ProcessProtocolHandler.cs
- DataGridViewSortCompareEventArgs.cs
- RequestTimeoutManager.cs
- Size3D.cs
- StorageRoot.cs
- BezierSegment.cs
- SafeNativeMethods.cs
- BamlLocalizationDictionary.cs
- FilterEventArgs.cs
- X509UI.cs
- Utils.cs
- LocationChangedEventArgs.cs
- HtmlGenericControl.cs
- ResolveNameEventArgs.cs
- ProtocolsSection.cs
- PagesSection.cs
- KeyInterop.cs
- TypeEnumerableViewSchema.cs
- ButtonAutomationPeer.cs
- EDesignUtil.cs
- WebBaseEventKeyComparer.cs
- RuleElement.cs
- AuthenticatedStream.cs
- IndexedDataBuffer.cs
- Single.cs
- RouteCollection.cs
- ScrollBar.cs
- TreeBuilderXamlTranslator.cs
- SingleTagSectionHandler.cs
- HyperLinkDataBindingHandler.cs
- CodeTypeParameter.cs
- VoiceChangeEventArgs.cs
- UndirectedGraph.cs
- PieceDirectory.cs
- Pkcs7Signer.cs
- RemoteWebConfigurationHost.cs
- SoundPlayerAction.cs
- LeftCellWrapper.cs
- UInt32.cs
- DefaultParameterValueAttribute.cs
- messageonlyhwndwrapper.cs
- BatchWriter.cs
- FontStyleConverter.cs
- XPathBinder.cs
- PageParser.cs
- FreezableOperations.cs
- TypeLoadException.cs
- Policy.cs
- BinaryCommonClasses.cs