This article was translated by machine. To view in the article in English, select the English check box. You can also display the English text in a popup window by moving the mouse pointer over the text.
الترجمة
الأصلي
This documentation is archived and is not being maintained.

SessionStateUtility الفئة

Visual Studio 2010

توفير طرق المساعد المستخدمة بواسطة الوحدات النمطية لحالة جلسة عمل وموفري sإلىre حالة جلسة عمل إلى إدارة معلومات جلسة عمل لتطبيق ASP.NET. و هذه الفئة لا يمكن أن تكون موروثة.

مساحة الاسم:  System.Web.SessionState
التجميع:  System.Web (في System.Web.dll)

public static class SessionStateUtility

SessionStateUtility توفر الفئة وظائف المساعد الثابتة التي يتم استخدامها من قبل الوحدة نمطية لحالة جلسة عمل أو تخزين الولاية جلسة عمل الموفر. لن تحتاج مطوري التطبيقات للاتصال بهذه الطرق من تعليمات برمجية الخاصة بهم.

يصف الجدول التالي وظائف "وحدة نمطية? لحالة جلسة عمل" و "موفر مخزن الولاية جلسة عمل باستخدام الأساليب.

Method

استخدم الأمرين

أسلوب GetHttpSessionStateFromContext:

Can be used بواسطة مخصص جلسة عمل-الولاية الوحدات النمطية إلى either retrieve جلسة عمل معلومات for an موجود جلسة عمل أو إنشاء جلسة عمل معلومات for a جديد جلسة عمل.

أسلوب AddHttpSessionStateToContext:

Called بواسطة the جلسة عمل-الولاية وحدة نمطية? إلى إضافة the جلسة عمل بيانات إلى the الحالي HttpContext و make it متوفر إلى تطبيق تعليمات برمجية through the Session خاصية.

أسلوب RemoveHttpSessionStateFromContext:

Called بواسطة the جلسة عمل-الولاية وحدة نمطية? during the ReleaseRequestState أو EndRequest أحداث at the إنهاء of a طلب, إلى مسح جلسة عمل بيانات من the الحالي HttpContext.

أسلوب GetSessionStaticObjects:

Called بواسطة the جلسة عمل-الولاية وحدة نمطية? إلى يحصل a مرجع إلى the StaticObjects مجموعة based تشغيل الكائنات defined في the عمومي.ASAX ملف. The HttpStaticObjectsCollection مجموعة returned هو مُضمن مع the جلسة عمل بيانات تمت الإضافة إلى the الحالي HttpContext.

جلسة عمل بيانات هو passed إلى و retrieved من the الحالي HttpContext كـ an HttpSessionStateContainer كائن أو أي صالح implementation of the IHttpSessionState واجهة.

For معلومات حول implementing a جلسة عمل-الولاية store موفر, see تطبيق موفر مخزن حالة جلسة العمل.

يلي تعليمات برمجية يظهر المثال تطبيق وحدة نمطية لالولاية جلسة عمل مخصص الذي يقوم بتخزين معلومات جلسة عمل في ذاكرة باستخدام Hashtable. يستخدم وحدة نمطية? SessionStateUtilityالفئة إلى مرجع الحالي HttpContextو SessionIDManager، استرداد الحالي HttpStaticObjectsCollection، ورفع Session_OnEndمعرف حدث في الملف عمومي.asax لتطبيق ASP.NET. لا يمنع هذا تطبيق الطلبات التلقائية لويب من استخدام نفس معرّف جلسة عمل.


using System;
using System.Web;
using System.Web.SessionState;
using System.Collections;
using System.Threading;
using System.Web.Configuration;
using System.Configuration;

namespace Samples.AspNet.SessionState
{

    public sealed class MySessionStateModule : IHttpModule, IDisposable
    {
        private Hashtable pSessionItems = new Hashtable();
        private Timer pTimer;
        private int pTimerSeconds = 10;
        private bool pInitialized = false;
        private int pTimeout;
        private HttpCookieMode pCookieMode = HttpCookieMode.UseCookies;
        private ReaderWriterLock pHashtableLock = new ReaderWriterLock();
        private ISessionIDManager pSessionIDManager;
        private SessionStateSection pConfig;


        // The SessionItem class is used to store data for a particular session along with
        // an expiration date and time. SessionItem objects are added to the local Hashtable
        // in the OnReleaseRequestState event handler and retrieved from the local Hashtable
        // in the OnAcquireRequestState event handler. The ExpireCallback method is called
        // periodically by the local Timer to check for all expired SessionItem objects in the
        // local Hashtable and remove them.

        private class SessionItem
        {
            internal SessionStateItemCollection Items;
            internal HttpStaticObjectsCollection StaticObjects;
            internal DateTime Expires;
        }


        //
        // IHttpModule.Init
        //

        public void Init(HttpApplication app)
        {
            // Add event handlers.
            app.AcquireRequestState += new EventHandler(this.OnAcquireRequestState);
            app.ReleaseRequestState += new EventHandler(this.OnReleaseRequestState);

            // Create a SessionIDManager.
            pSessionIDManager = new SessionIDManager();
            pSessionIDManager.Initialize();

            // If not already initialized, initialize timer and configuration.
            if (!pInitialized)
            {
                lock (typeof(MySessionStateModule))
                {
                    if (!pInitialized)
                    {
                        // Create a Timer to invoke the ExpireCallback method based on
                        // the pTimerSeconds value (e.g. every 10 seconds).

                        pTimer = new Timer(new TimerCallback(this.ExpireCallback),
                                           null,
                                           0,
                                           pTimerSeconds * 1000);

                        // Get the configuration section and set timeout and CookieMode values.
                        Configuration cfg =
                          WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
                        pConfig = (SessionStateSection)cfg.GetSection("system.web/sessionState");

                        pTimeout = (int)pConfig.Timeout.TotalMinutes;
                        pCookieMode = pConfig.Cookieless;

                        pInitialized = true;
                    }
                }
            }
        }



        //
        // IHttpModule.Dispose
        //

        public void Dispose()
        {
            if (pTimer != null)
            {
                this.pTimer.Dispose();
               ((IDisposable)pTimer).Dispose();
            }
        }


        //
        // Called periodically by the Timer created in the Init method to check for 
        // expired sessions and remove expired data.
        //

        void ExpireCallback(object state)
        {
            try
            {
                pHashtableLock.AcquireWriterLock(Int32.MaxValue);

                this.RemoveExpiredSessionData();

            }
            finally
            {
                pHashtableLock.ReleaseWriterLock();
            }
        }


        //
        // Recursivly remove expired session data from session collection.
        //
        private void RemoveExpiredSessionData()
        {
            string sessionID;

            foreach (DictionaryEntry entry in pSessionItems)
            {
                SessionItem item = (SessionItem)entry.Value;

                if ( DateTime.Compare(item.Expires, DateTime.Now)<=0 )
                {
                    sessionID = entry.Key.ToString();
                    pSessionItems.Remove(entry.Key);

                    HttpSessionStateContainer stateProvider =
                      new HttpSessionStateContainer(sessionID,
                                                   item.Items,
                                                   item.StaticObjects,
                                                   pTimeout,
                                                   false,
                                                   pCookieMode,
                                                   SessionStateMode.Custom,
                                                   false);

                    SessionStateUtility.RaiseSessionEnd(stateProvider, this, EventArgs.Empty);
                    this.RemoveExpiredSessionData();
                    break;
                }
            }

        }


        //
        // Event handler for HttpApplication.AcquireRequestState
        //

        private void OnAcquireRequestState(object source, EventArgs args)
        {
            HttpApplication app = (HttpApplication)source;
            HttpContext context = app.Context;
            bool isNew = false;
            string sessionID;
            SessionItem sessionData = null;
            bool supportSessionIDReissue = true;

            pSessionIDManager.InitializeRequest(context, false, out supportSessionIDReissue);
            sessionID = pSessionIDManager.GetSessionID(context);


            if (sessionID != null)
            {
                try
                {
                    pHashtableLock.AcquireReaderLock(Int32.MaxValue);
                    sessionData = (SessionItem)pSessionItems[sessionID];

                    if (sessionData != null)
                       sessionData.Expires = DateTime.Now.AddMinutes(pTimeout);
                }
                finally
                {
                    pHashtableLock.ReleaseReaderLock();
                }
            }
            else
            {
                bool redirected, cookieAdded;

                sessionID = pSessionIDManager.CreateSessionID(context);
                pSessionIDManager.SaveSessionID(context, sessionID, out redirected, out cookieAdded);

                if (redirected)
                    return;
            }

            if (sessionData == null)
            {
                // Identify the session as a new session state instance. Create a new SessionItem
                // and add it to the local Hashtable.

                isNew = true;

                sessionData = new SessionItem();

                sessionData.Items = new SessionStateItemCollection();
                sessionData.StaticObjects = SessionStateUtility.GetSessionStaticObjects(context);
                sessionData.Expires = DateTime.Now.AddMinutes(pTimeout);

                try
                {
                    pHashtableLock.AcquireWriterLock(Int32.MaxValue);
                    pSessionItems[sessionID] = sessionData;
                }
                finally
                {
                    pHashtableLock.ReleaseWriterLock();
                }
            }

            // Add the session data to the current HttpContext.
            SessionStateUtility.AddHttpSessionStateToContext(context,
                             new HttpSessionStateContainer(sessionID,
                                                          sessionData.Items,
                                                          sessionData.StaticObjects,
                                                          pTimeout,
                                                          isNew,
                                                          pCookieMode,
                                                          SessionStateMode.Custom,
                                                          false));

            // Execute the Session_OnStart event for a new session.
            if (isNew && Start != null)
            {
                Start(this, EventArgs.Empty);
            }
        }

        //
        // Event for Session_OnStart event in the Global.asax file.
        //

        public event EventHandler Start;


        //
        // Event handler for HttpApplication.ReleaseRequestState
        //

        private void OnReleaseRequestState(object source, EventArgs args)
        {
            HttpApplication app = (HttpApplication)source;
            HttpContext context = app.Context;
            string sessionID;

            // Read the session state from the context
            HttpSessionStateContainer stateProvider =
              (HttpSessionStateContainer)(SessionStateUtility.GetHttpSessionStateFromContext(context));

            // If Session.Abandon() was called, remove the session data from the local Hashtable
            // and execute the Session_OnEnd event from the Global.asax file.
            if (stateProvider.IsAbandoned)
            {
                try
                {
                    pHashtableLock.AcquireWriterLock(Int32.MaxValue);

                    sessionID = pSessionIDManager.GetSessionID(context);
                    pSessionItems.Remove(sessionID);
                }
                finally
                {
                    pHashtableLock.ReleaseWriterLock();
                }

                SessionStateUtility.RaiseSessionEnd(stateProvider, this, EventArgs.Empty);
            }

            SessionStateUtility.RemoveHttpSessionStateFromContext(context);
        }


    }
}


إلى استخدام هذه وحدة نمطية? لالولاية جلسة عمل cusإلىm في أحد تطبيقات ASP.NET، يمكنك استبدال موجودة SessionStateModuleمرجعاً في ملف ويب.config، كما هو موضح في المثال التالي.

<configuration>
  <system.web>
    <httpModules>
      <remove name="Session" />
      <add name="Session"
      type="Samples.AspNet.SessionState.MySessionStateModule" />
    </httpModules>
  </system.web>
</configuration>

System.Object
  System.Web.SessionState.SessionStateUtility

يتم تأمين العملية الجزئية لأي عضو عمومي ثابت (مشترك في Visual Basic) من هذا النوع. لن يتم ضمان تأمين العملية الجزئية لأي عضو مثيل.

نظام التشغيل Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, الإصدار x64 من نظام التشغيل Windows XP Professional, Windows XP Starter Edition, Windows Server 2008, نظام التشغيل Windows Server 2003, نظام التشغيل Windows Server 2000 المزود بحزمة الخدمة SP4, نظام التشغيل Windows Millennium Edition, نظام التشغيل Windows 98

لا يدعم .NET Framework و .NET Compact Framework كافة الإصدارات الخاصة بكل نظام أساسي. للحصول على قائمة بالإصدارات المدعمة، راجع متطلبات النظام إطار عمل .NET.

.NET Framework

مدعوم في: 4, 3.5, 3.0, 2.0
إظهار: