Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / SessionPageStatePersister.cs / 1 / SessionPageStatePersister.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System.Collections; using System.Collections.Specialized; using System.IO; using System.Text; using System.Web.SessionState; using System.Web.Configuration; using System.Security.Permissions; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class SessionPageStatePersister : PageStatePersister { private const string _viewStateSessionKey = "__SESSIONVIEWSTATE"; private const string _viewStateQueueKey = "__VIEWSTATEQUEUE"; public SessionPageStatePersister(Page page) : base (page) { HttpSessionState session = null; try { session = page.Session; } catch { // ignore, throw if session is null. } if (session == null) { throw new ArgumentException(SR.GetString(SR.SessionPageStatePersister_SessionMustBeEnabled)); } } public override void Load() { NameValueCollection requestValueCollection = Page.RequestValueCollection; if (requestValueCollection == null) { return; } try { string combinedSerializedStateString = Page.RequestViewStateString; string persistedStateID = null; bool controlStateInSession = false; // SessionState will persist a Pair of, // where if requiresControlStateInSession is true, second will just be the sessionID, as // we will store both control state and view state in session. Otherwise, we store just the // view state in session and the pair will be if (!String.IsNullOrEmpty(combinedSerializedStateString)) { Pair combinedState = (Pair)Util.DeserializeWithAssert(StateFormatter, combinedSerializedStateString); // Check if we are storing control state in session as well if ((bool)combinedState.First) { // So the second is the persistedID persistedStateID = (string)combinedState.Second; controlStateInSession = true; } else { // Second is Pair pair = (Pair)combinedState.Second; persistedStateID = (string)pair.First; ControlState = pair.Second; } } if (persistedStateID != null) { object sessionData = Page.Session[_viewStateSessionKey + persistedStateID]; if (controlStateInSession) { Pair combinedState = sessionData as Pair; if (combinedState != null) { ViewState = combinedState.First; ControlState = combinedState.Second; } } else { ViewState = sessionData; } } } catch (Exception e) { // Setup the formatter for this exception, to make sure this message shows up // in an error page as opposed to the inner-most exception's message. HttpException newException = new HttpException(SR.GetString(SR.Invalid_ControlState), e); newException.SetFormatter(new UseLastUnhandledErrorFormatter(newException)); throw newException; } } /// /// To be supplied. /// public override void Save() { bool requiresControlStateInSession = false; object clientData = null; Triplet vsTrip = ViewState as Triplet; // no session view state to store. if ((ControlState != null) || ((vsTrip == null || vsTrip.Second != null || vsTrip.Third != null) && ViewState != null)) { HttpSessionState session = Page.Session; string sessionViewStateID = Convert.ToString(DateTime.Now.Ticks, 16); object state = null; requiresControlStateInSession = Page.Request.Browser.RequiresControlStateInSession; if (requiresControlStateInSession) { // ClientState will just be sessionID state = new Pair(ViewState, ControlState); clientData = sessionViewStateID; } else { // ClientState will be astate = ViewState; clientData = new Pair(sessionViewStateID, ControlState); } string sessionKey = _viewStateSessionKey + sessionViewStateID; session[sessionKey] = state; Queue queue = session[_viewStateQueueKey] as Queue; if (queue == null) { queue = new Queue(); session[_viewStateQueueKey] = queue; } queue.Enqueue(sessionKey); SessionPageStateSection cfg = RuntimeConfig.GetConfig(Page.Request.Context).SessionPageState; int queueCount = queue.Count; if (cfg != null && queueCount > cfg.HistorySize || cfg == null && queueCount > SessionPageStateSection.DefaultHistorySize) { string oldSessionKey = (string)queue.Dequeue(); session.Remove(oldSessionKey); } } if (clientData != null) { Page.ClientState = Util.SerializeWithAssert(StateFormatter, new Pair(requiresControlStateInSession, clientData)); } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlIlGenerator.cs
- ReturnType.cs
- OdbcConnectionString.cs
- DrawingCollection.cs
- SafeViewOfFileHandle.cs
- CalendarTable.cs
- MobileControlDesigner.cs
- KnownTypes.cs
- FixedPageAutomationPeer.cs
- TypeDependencyAttribute.cs
- SafeCertificateStore.cs
- DeclaredTypeValidator.cs
- StreamingContext.cs
- AuthenticateEventArgs.cs
- SocketInformation.cs
- NumericUpDown.cs
- DirectoryObjectSecurity.cs
- WebHttpBindingElement.cs
- BrowserTree.cs
- Filter.cs
- BoundsDrawingContextWalker.cs
- HtmlWindowCollection.cs
- precedingquery.cs
- WhileDesigner.cs
- TextFormattingConverter.cs
- JavaScriptSerializer.cs
- NativeMethods.cs
- BufferModesCollection.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- XmlAutoDetectWriter.cs
- MarkupExtensionSerializer.cs
- _NegoStream.cs
- LoginAutoFormat.cs
- TrackingServices.cs
- XmlTextReaderImplHelpers.cs
- DockPattern.cs
- CallSiteBinder.cs
- DispatcherHookEventArgs.cs
- Expressions.cs
- ApplyTemplatesAction.cs
- TextClipboardData.cs
- XmlILModule.cs
- HitTestFilterBehavior.cs
- columnmapfactory.cs
- SafeUserTokenHandle.cs
- MultipartIdentifier.cs
- Typography.cs
- GenerateTemporaryTargetAssembly.cs
- SecurityTokenRequirement.cs
- DelegateArgumentValue.cs
- HttpStreamMessage.cs
- ConsoleTraceListener.cs
- UIElementIsland.cs
- SchemaNamespaceManager.cs
- HostedTcpTransportManager.cs
- RtfToXamlLexer.cs
- SelectionItemProviderWrapper.cs
- PolyLineSegment.cs
- SchemaSetCompiler.cs
- CompilerResults.cs
- QueryPageSettingsEventArgs.cs
- XpsFixedDocumentSequenceReaderWriter.cs
- ResourceReferenceKeyNotFoundException.cs
- XmlCustomFormatter.cs
- WindowShowOrOpenTracker.cs
- Wrapper.cs
- RegistryDataKey.cs
- HttpStreamXmlDictionaryWriter.cs
- shaperfactoryquerycacheentry.cs
- HierarchicalDataBoundControlAdapter.cs
- WebBrowserPermission.cs
- OverrideMode.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- X509CertificateClaimSet.cs
- DbMetaDataCollectionNames.cs
- CodeIndexerExpression.cs
- SwitchLevelAttribute.cs
- RegistryKey.cs
- XmlWrappingWriter.cs
- Helpers.cs
- ComponentDispatcherThread.cs
- PerformanceCounterManager.cs
- FieldToken.cs
- FixedPageStructure.cs
- WinFormsUtils.cs
- WindowsFormsHelpers.cs
- _IPv6Address.cs
- Token.cs
- TextMessageEncodingBindingElement.cs
- TextSpan.cs
- XmlCountingReader.cs
- securitymgrsite.cs
- Msec.cs
- ADConnectionHelper.cs
- WorkflowFileItem.cs
- ProfileSettings.cs
- SqlNode.cs
- HttpCookiesSection.cs
- SmtpTransport.cs
- WebPartsSection.cs