HTTP(Hypertext Transfer Protocol)는 상태 비저장 프로토콜입니다. 클라이언트가 서버와의 연결을 끊으면 ASP.NET 엔진은 페이지 개체를 삭제합니다. 이러한 방식으로 각 웹 애플리케이션은 서버 메모리를 소모하지 않고 동시에 많은 수의 요청을 처리하도록 확장할 수 있습니다.
그러나 요청 간에 정보를 저장하고 필요할 때 검색하려면 몇 가지 기술이 필요합니다. 이 정보를 상태라고 하며, 이는 현재 세션에서 현재 사용자가 사용하는 모든 컨트롤 및 변수의 현재 값입니다.
ASP.NET은 다음 네 가지 상태를 관리합니다.
상태 보기
제어 상태
세션 상태
신청현황
보기 상태는 페이지와 모든 컨트롤의 상태입니다. ASP.NET 프레임워크의 피드백을 통해 변경되지 않은 상태로 유지됩니다.
페이지가 클라이언트로 다시 전송되면 이러한 페이지 변경 사항의 속성과 컨트롤이 결정되어 _VIEWSTATE라는 숨겨진 입력 필드의 값에 저장됩니다. 페이지가 다시 게시되면 _VIEWSTATE 필드가 HTTP 요청과 함께 서버로 전송됩니다.
보기 상태는 다음에 대해 활성화 또는 비활성화될 수 있습니다.
전체 애플리케이션 : web.config 파일 섹션의 EnableViewState 속성을 설정합니다.
페이지 : 페이지 명령의 EnableViewState 속성을 <%@ Page Language="C#" EnableViewState="false" %>로 설정합니다.
컨트롤 : control.EnableViewState 속성을 설정합니다.
이는 뷰 상태 항목 세트로 정의된 StateBag 클래스에 의해 정의된 뷰 상태 개체를 사용하여 수행됩니다. StateBag는 속성 값 쌍을 포함하고 개체와 연결된 문자열로 저장되는 데이터 구조입니다.
StateBag 클래스에는 다음과 같은 속성이 있습니다.
재산 | 설명하다 |
---|---|
품목(이름) | StateBag의 기본 속성인 지정된 이름의 뷰 상태 값입니다. |
세다 | 상태 컬렉션에 있는 항목의 이름입니다. |
열쇠 | 컬렉션의 모든 항목에 대한 키 컬렉션입니다. |
가치 | 컬렉션의 모든 항목에 대한 값 모음입니다. |
StateBag 클래스에는 다음과 같은 메서드가 있습니다.
방법 | 설명하다 |
---|---|
추가(이름, 값) | viewstate 컬렉션에 항목을 추가하여 기존 항목을 업데이트합니다. |
분명한 | 컬렉션에서 모든 항목을 제거합니다. |
같음(객체) | 지정된 개체가 현재 개체와 같은지 여부를 확인합니다. |
마무리 | 리소스를 해제하고 기타 정리 작업을 수행할 수 있습니다. |
GetEnumerator | StateBag 개체에 저장된 중복 StateItem 개체에 대한 키/값 쌍의 카운터를 반환합니다. |
GetType | 현재 인스턴스의 유형을 가져옵니다. |
IsItemDirty | StateBag에 저장된 객체가 수정되었는지 확인합니다. |
(이름) 삭제 | 사용자 정의 항목을 제거합니다. |
더러운 설정 | StateBag 개체의 상태와 포함된 각 StateItem 개체의 Dirty 속성을 설정합니다. |
SetItemDirty | StateBag 개체의 지정된 StateItem 개체에 대한 Dirty 속성을 설정합니다. |
ToString | 상태 패키지 객체를 나타내는 문자열을 반환합니다. |
다음 예에서는 뷰 상태를 저장하는 문자열의 개념을 보여줍니다.
페이지의 버튼을 클릭하여 페이지를 다시 호출할 때마다 증가할 수 있는 카운터를 유지해 보겠습니다. 레이블 컨트롤은 카운터 값을 표시합니다.
태그 파일 코드는 다음과 같습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <h3>View State demo</h3> Page Counter: <asp:Label ID="lblCounter" runat="server" /> <asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" /> </div> </form> </body></html>
이 인스턴스의 코드 숨김 파일은 다음과 같습니다.
public partial class _Default : System.Web.UI.Page{ public int counter { get { if (ViewState["pcounter"] != null) { return ((int)ViewState["pcounter"]); } else { return 0; } } set { ViewState["pcounter"] = value; } } protected void Page_Load(object sender, EventArgs e) { lblCounter.Text = counter.ToString(); counter++; }}
다음과 같은 결과가 생성됩니다.
제어 상태는 직접 수정, 액세스 또는 비활성화할 수 없습니다.
사용자가 ASP.NET 웹 사이트에 연결하면 새 세션 개체가 생성됩니다. 세션 상태가 활성화되면 새 요청마다 새 세션 상태가 생성됩니다. 이 세션 상태 개체는 런타임 환경의 일부가 되며 페이지를 통해 사용할 수 있습니다.
세션 상태는 일반적으로 재고, 공급자 목록, 고객 기록 또는 장바구니와 같은 애플리케이션 데이터를 저장하는 데 사용됩니다. 사용자의 정보와 선호도 정보를 저장할 수 있으며, 사용자가 결정하지 못한 경로를 저장할 수 있습니다.
세션은 120비트 SessionID로 식별 및 추적되며 클라이언트에서 서버로 전달되고 쿠키 또는 수정된 URL로 반환됩니다. SessionID는 전역적으로 고유하고 무작위입니다.
세션 상태 개체는 세션 상태 항목 컬렉션을 정의하는 HttpSessionState 클래스에 의해 생성됩니다.
HttpSessionState 클래스에는 다음과 같은 속성이 있습니다.
재산 | 설명하다 |
---|---|
세션ID | 고유한 세션 식별자입니다. |
품목(이름) | HttpSessionState 클래스의 기본 속성인 지정된 이름을 가진 세션 상태 항목의 값입니다. |
세다 | 세션 상태 컬렉션의 항목 수입니다. |
시간 초과 | 공급자가 세션 상태를 중지하기 전에 요청 간에 허용되는 시간(분)을 가져오고 설정합니다. |
HttpSessionState 클래스에는 다음과 같은 메서드가 있습니다.
방법 | 설명하다 |
---|---|
추가(이름, 값) | 세션 상태 컬렉션에 새 항목을 추가합니다. |
분명한 | 세션 상태 컬렉션에서 모든 항목을 제거합니다. |
(이름) 삭제 | 세션 상태 컬렉션에서 지정된 항목을 제거합니다. |
모두 제거 | 세션 상태 컬렉션에서 모든 키와 값을 제거합니다. |
제거 위치 | 세션 상태 컬렉션에서 지정된 인덱스에 있는 항목을 제거합니다. |
세션 상태 개체는 세션 상태 개체에서 정보를 저장하고 검색할 수 있는 이름-값 쌍입니다. 마찬가지로 다음 코드를 사용할 수 있습니다.
void StoreSessionInfo(){ String fromuser = TextBox1.Text; Session["fromuser"] = fromuser;}void RetrieveSessionInfo(){ String fromuser = Session["fromuser"]; Label1.Text = fromuser;}
위의 코드는 세션 사전 개체에 문자열만 저장하지만 기본 데이터 형식, DataSet, DataTable, HashTable 및 Image 개체로 구성된 모든 기본 데이터 형식과 배열은 물론 다음에서 상속하는 모든 사용자 정의 개체를 저장할 수 있습니다. ISerialize 가능한 개체입니다.
다음 예에서는 세션 상태 저장의 개념을 보여줍니다. 페이지에는 문자열을 입력하는 텍스트 상자 버튼과 마지막 세션에서 저장된 텍스트를 표시하는 레이블 버튼이라는 두 개의 버튼이 있습니다. 태그 파일 코드는 다음과 같습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <asp:Label ID="lblstr" runat="server" Text="Enter a String" > </asp:Label> </td> <td> <asp:TextBox ID="txtstr" runat="server"> </asp:TextBox> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Button ID="btnnrm" runat="server" Text="No action button" /> </td> <td> <asp:Button ID="btnstr" runat="server" OnClick="btnstr_Click" Text="Submit the String" /> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblsession" runat="server" > </asp:Label> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblshstr" runat="server"> </asp:Label> </td> <td> </td> </tr> </table> </div> </form> </body></html>
디자인 보기에서는 다음과 같아야 합니다.
배경 코드는 다음과 같습니다.
public partial class _Default : System.Web.UI.Page { String mystr; protected void Page_Load(object sender, EventArgs e) { this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; } protected void btnstr_Click(object sender, EventArgs e) { this.mystr = this.txtstr.Text; this.Session["str"] = this.txtstr.Text; this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; }}
파일을 실행하고 어떻게 실행되는지 살펴보세요.
ASP.NET 응용 프로그램은 웹 서버의 단일 가상 디렉터리에 있는 모든 웹 페이지, 코드 및 기타 파일의 모음입니다. 정보가 애플리케이션 상태에 저장되면 모든 사용자가 사용할 수 있습니다.
응용 프로그램 상태 사용을 제공하기 위해 ASP.NET은 HttpApplicationState 클래스에서 각 응용 프로그램에 대한 응용 프로그램 상태 개체를 만들고 해당 개체를 서버 메모리에 저장합니다. 이 개체는 클래스 파일 global.asax로 표시됩니다.
애플리케이션 상태는 주로 카운터, 기타 통계 및 세율 및 할인율과 같은 모든 애플리케이션 데이터를 저장하고 사용자의 웹 사이트 경로를 저장하는 데 사용됩니다.
HttpApplicationState 클래스에는 다음과 같은 속성이 있습니다.
재산 | 설명하다 |
---|---|
품목(이름) | HttpApplicationState의 기본 속성인 지정된 이름을 가진 애플리케이션 항목의 값입니다. |
세다 | 애플리케이션 상태 컬렉션의 항목 수입니다. |
HttpApplicationState 클래스에는 다음과 같은 메서드가 있습니다.
방법 | 설명하다 |
---|---|
추가(이름, 값) | 애플리케이션 상태 컬렉션에 새 항목을 추가합니다. |
분명한 | 애플리케이션 상태 컬렉션에서 모든 항목을 제거합니다. |
(이름) 삭제 | 애플리케이션 상태 컬렉션에서 지정된 항목을 제거합니다. |
모두 제거 | HttpApplicationState 컬렉션의 모든 개체를 제거합니다. |
제거 위치 | 인덱스에서 찾은 컬렉션에서 HttpApplicationState 개체를 제거합니다. |
잠그다() | 현재 사용자만 액세스할 수 있도록 애플리케이션 상태 컬렉션을 잠급니다. |
터놓다() | 모든 사용자가 액세스할 수 있도록 애플리케이션 상태 컬렉션을 잠금 해제합니다. |
애플리케이션 상태 데이터는 일반적으로 이벤트용으로 작성된 핸들러에 의해 유지됩니다.
신청이 시작됩니다
신청 종료
응용 프로그램 오류
세션 시작
세션이 종료되었습니다
다음 코드 조각은 애플리케이션 상태 정보를 저장하기 위한 기본 구문을 보여줍니다.
Void Application_Start(object sender, EventArgs e){ Application["startMessage"] = "The application has started.";}Void Application_End(object sender, EventArgs e){ Application["endtMessage"] = "The application has ended.";}