.NET технологии Изграждане на уеб приложения с ASP.NET Forms Управление на състоянието (state)
State Повечето приложения използват данни (променливи), които трябва да се съхранят по време на няколко заявки и/или потребители на приложението. Това се нарича state. В уеб приложенията това не става толкова лесно както при локалните приложения тъй като HTTP по принцип не запазва състояние.
Управление на състоянието (state) application state session state варианти за съхранение на session state cookies server controls state (view state)
Application State данни, които трябва да се поделят между множество (или всички) потребители на приложението съществува от стартиране на приложението на сървъра до спирането му на сървъра
Application State - колекция Application["USD"] = "1.59"; TextBox1.Text = Application["USD"].ToString(); // Application е обект от класа HttpApplicationState // *** демо ***
Обект Application - други методи Application.Add("MyApplicationVar", "MyValue"); Application.Add("MyOtherApplicationVar", "MyOtherValue"); Application.Remove("MyOtherApplicationVar"); Application.Clear(); Application.RemoveAll(); // същото Count - брой обекти в колекцията
Синхронизация на достъпа може да възникнат проблеми при едновременна промяна на application state от няколко потребителя при промяна на application state променлива е добре да се вика Applcation.Lock() и след завършване на промяната - Application.UnLock() заключването да е минимално!
Session State данни, които трябва да се запазят в рамките на работата на 1 потребител с приложението, т.е. между отварянето на различни страници от него съществува от отварянето за пръв път на страница от приложението до затварянето на браузъра или изтичането на time-out (по подразбиране 20 мин.)
Session State - колекция Session["Name"] = TextBox1.Text; Label1.Text = Session["Name"].ToString(); // Session е обект от класа HttpSessionState // *** демота ***
Session - други методи/свойства Count - брой променливи SessionID - уникален идентификатор на сесията Abandon - унищожава текущата сесия Remove - премахва променлива Clear = RemoveAll - премахва всички променливи TimeOut - време в минути за time-out
Достъп до Session State от страници False не унищожава сесията, а само забранява достъпа до променливите. Може да е и ReadOnly
Начини за съхраняване на Session State Задават се във файла Web.config и могат да бъдат: In-Process (InProc) Out-of-process (StateServer) SQL Server (SQLServer) Cookieless Sessions - настройка дали ще се използват или не cookies
In-Process по подразбиране най-лесно за изпълнение, нищо друго не се прави липсва мащабируемост и поддръжка на web farms (много сървъри) не се запазва при рестартиране или умиране на сървъра
Out-of-Process отделен сървър поддържа информация за състоянието по-добра мащабируемост, поддръжка на web farms (много сървъри) по-бавен вариант ако се поддържа малко информация или има малко потребители
Out-of-Process - конфигуриране (1) Конфигуриране в Web.config: В секцията <cofiguration>, подсекцията <system.web> <sessionstate mode="stateserver" stateconnectionstring="tcpip=127.0.0.1:42424"/>
Out-of-Process - конфигуриране (2)
SQL Server информацията за състоянието се поддържа в база от данни по-добра мащабируемост, поддръжка на web farms (много сървъри) "преживява" рестартиране на някой/ някои от сървърите по-бавен вариант ако се поддържа малко информация или има малко потребители
SQL Server - конфигуриране Настройка на самия SQL Server - трябва да се изпълни SQL кодът от файла: InstallSqlState.sql намиращ се в директорията на инсталация на.net Framework, която по подразбиране е: %windir%\microsoft.net\framework\%version% Може да се използва и средството aspnet_regsql.exe Конфигуриране в Web.config: (този вариант за изрично задаване на име/парола не е найподходящ...) <sessionstate mode="sqlserver" sqlconnectionstring="data source=127.0.0.1; user id=sa;password=password"/>
Cookieless Sessions за браузъри, които не поддържат cookies или при забрана за приемане на cookies има възможност автоматично в URL да се вгражда и използва ID на сесията
Cookieless Sessions - конфигуриране Конфигуриране в Web.config (в system.web): <sessionstate cookieless="true"/>
Ръчно използване на cookies HttpCookie MyCookie = New HttpCookie("MyCookieName"); MyCookie.Value = "MyValue"; Response.Cookies.Add(MyCookie); string myvariable = Response.Cookies["MyCookieName"].Value; Преди да се добави може да се даде време на живот: MyCookie.Expires = DateTime.Now.AddDays(2); Response.Cookies.Remove("MyCookieName");
Състояние на сървърните контроли поддържа се автоматично и се нарича ViewState запазват се стойностите на контролите след обработка на събития и презареждане на страницата