이 기사에서는 ASP.NET 페이지 간 데이터 전송의 여러 가지 방법에 대해 설명합니다. 이것이 모든 사람이 ASP.NET 페이지 간 데이터 전송의 유용성과 편리함을 올바르게 이해하는 데 도움이 되기를 바랍니다.
0. 소개
웹 페이지는 상태 비저장(stateless)입니다. 따라서 서버는 각 요청이 다른 사용자로부터 온 것으로 간주합니다. 따라서 동일한 페이지에 대한 여러 연속 요청 간에 또는 페이지가 이동할 때 변수 상태가 유지되지 않습니다. ASP.NET으로 웹 시스템을 설계하고 개발할 때 직면하게 되는 중요한 문제는 페이지 간에 데이터가 정확하고 안전하며 효율적으로 전송되는지 확인하는 것입니다. Asp.net은 보존 문제를 해결하기 위해 상태 관리와 같은 다양한 기술을 제공합니다. 데이터 문제와 관련하여 .NET에서 이 문제를 해결하는 다양한 방법과 해당 상황을 살펴보겠습니다.
1. ASP.NET 페이지 간 데이터 전송에 대한 다양한 방법 및 분석
1.1 쿼리스트링 방식 사용하기
QueryString은 쿼리스트링(query string)이라고도 하며 웹페이지 주소(URL) 끝에 전송할 데이터를 붙여서 전송하는 방식이다. 예를 들어 A.aspx 페이지에서 B.aspx 페이지로 이동하려면 Request.Redirect("B.aspx? 매개변수 이름 = 매개변수 값") 메서드를 사용하거나 페이지 이동 후 하이퍼링크를 사용할 수 있습니다. , 대상 페이지에서 매개변수를 수신할 수 있습니다. QuerySting 메서드를 사용하면 구현이 간단하고 서버 리소스를 사용하지 않는다는 장점이 있습니다. 단점은 전달된 값이 변조될 위험이 있으므로 브라우저의 주소 표시줄에 표시되며 개체를 확인할 수 없다는 것입니다. 쿼리 문자열은 URL을 통해 페이지를 요청하는 경우에만 사용할 수 있습니다.
1.2 숨겨진 필드 활용
숨겨진 필드는 사용자의 브라우저에 표시되지 않습니다. 일반적으로 숨겨진 컨트롤은 서버와 상호 작용할 때 숨겨진 컨트롤에 값이 할당되고 다음 페이지로 제출됩니다. 숨겨진 도메인은 웹 페이지와 관련된 웹 페이지에 저장된 모든 정보의 저장소가 될 수 있습니다. 숨겨진 필드를 사용하여 값을 저장하는 경우: 숨겨진 컨트롤.값=숫자 값을 사용합니다. 수신된 값을 꺼낼 때는 변수=숨겨진 컨트롤.값을 사용합니다. 숨겨진 필드를 사용하면 구현이 간단하다는 장점이 있습니다. 숨겨진 필드는 표준 HTML 컨트롤이며 복잡한 프로그래밍 논리가 필요하지 않습니다. 숨겨진 필드는 페이지에 저장되고 읽혀지며 서버 리소스가 필요하지 않으며 거의 모든 브라우저와 클라이언트 장치는 숨겨진 필드가 있는 양식을 지원합니다. 단점은 저장 구조가 적고 단순한 데이터 구조만 지원한다는 점이다. 페이지 자체에 저장되기 때문에 저장 용량이 작아서 더 큰 값을 저장할 수 없고, 많은 양의 데이터가 방화벽과 프록시에 의해 차단된다.
1.3 뷰스테이트
ViewState는 ASP.NET 페이지 프레임워크에서 관리하는 숨겨진 양식 필드입니다. ASP.NET이 페이지를 실행하면 페이지의 ViewState 값과 모든 컨트롤이 수집되어 인코딩된 문자열로 서식이 지정된 다음 숨겨진 양식 필드의 Value 속성에 할당됩니다. ViewState를 사용하여 데이터를 전송할 때 다음을 사용할 수 있습니다. ViewState ["변수 이름"]=숫자 값 데이터를 검색할 때 다음을 사용합니다: 변수=ViewState["변수 이름"]. ViewState를 사용하면 동일한 페이지에 대한 여러 요청 간에 값이 자동으로 유지되고 서버 측 리소스가 필요하지 않으며 구현이 간단하며 뷰 상태의 값이 해시되고 압축됩니다. 유니코드 구현을 위해 인코딩되었으며 해당 보안 요구 사항은 숨겨진 필드를 사용하는 것보다 높습니다. 단점은 ViewState가 페이지 자체에 저장되기 때문에 더 큰 값이 저장되면 페이지를 표시하고 보낼 때 사용자의 속도가 느려질 수 있다는 것입니다. . 뷰 상태는 데이터를 해시된 형식으로 저장하지만 여전히 변조될 수 있습니다.
1.4 쿠키 사용
쿠키는 페이지 간에 소량의 정보를 전송할 수 있으며 클라이언트의 텍스트 파일이나 클라이언트의 메모리에 저장될 수 있습니다. 쿠키 방식은 로그인한 웹사이트에 대한 로그인 사용자명 저장, 이용자 입력의 편의 제공, 일부 이용자 정의 항목에 대한 이용자 개인 설정 저장 등 작은 양의 페이지에서 자주 변경되는 정보를 저장하는 데 적합합니다. 쿠키를 사용하여 데이터를 전송할 때 사용 가능: Response.Cookies["key name"]=데이터 검색을 위한 키 값: 변수 이름=Request.Cookies["key name"]. 쿠키 사용의 장점은 다음과 같습니다. 쿠키는 클라이언트에 저장되고, 서버 리소스를 사용하지 않으며, 구현이 간단하고, 만료 시간을 구성할 수 있습니다. 단점: 저장할 수 있는 데이터의 양이 상대적으로 적습니다. 쿠키는 모든 브라우저에서 지원되지 않으며 사용자에 의해 금지되거나 삭제될 수 있으므로 중요한 데이터를 저장하는 데 사용할 수 없습니다. 또한 쿠키는 단순한 일반 텍스트로 저장되므로 암호화되지 않은 민감한 데이터를 쿠키에 저장하는 것은 적절하지 않습니다.
1.5 응용 프로그램 변수 사용
응용 프로그램 변수는 페이지 간에 값을 전송하는 데도 사용할 수 있습니다. 응용 프로그램 변수는 전역적이며 모든 사용자가 응용 프로그램 변수를 공유하면 프로그램의 모든 부분에 영향을 미칩니다. 전체 애플리케이션에서 특정 변수 값을 사용하려면 Application 개체가 최선의 선택이 될 것입니다. 데이터를 저장할 때 애플리케이션 변수에 값을 추가합니다. Application["변수 이름"]=숫자 값; 데이터 검색에 사용: 변수=애플리케이션["변수 이름"]; 애플리케이션을 사용할 필요가 없으면 이를 지웁니다. 명시적으로 :애플리케이션["수량 이름"]=null.
애플리케이션 장점: 사용하기 쉽고 글로벌 범위입니다. 애플리케이션의 모든 페이지에서 사용할 수 있습니다. 단점: 데이터를 저장하는 서버 측 프로세스가 손상되면(예: 서버 충돌, 업그레이드 또는 종료로 인해) 데이터가 손실되므로 애플리케이션을 사용할 때 서버 측 메모리를 점유한다는 보장된 전략이 있어야 합니다. 이는 서버 성능 및 애플리케이션 확장성에 영향을 미칠 수 있습니다.
1.6 세션 변수 사용
세션 개체는 유지 관리해야 하는 지정된 대화에 대한 정보를 저장하는 데 사용할 수 있습니다. 세션은 개별 세션과 관련된 단기 정보를 저장하는 데 사용됩니다. Session의 사용법과 형식은 Application과 동일합니다.
장점: 구현이 쉽고, 높은 보안성과 내구성을 제공하며, IIS 재시작 및 보조 프로세스 재시작에 대응할 수 있으며, 여러 프로세스에서 사용할 수 있습니다. 단점은 서버 측 메모리를 소비한다는 것입니다. 따라서 많은 정보를 저장하지 마십시오. 세션의 가장 일반적인 용도는 쿠키와 함께 웹 애플리케이션에 사용자 식별 기능을 제공하는 것입니다. 세션은 쿠키를 지원하지 않는 브라우저에서도 사용할 수 있습니다. 그러나 쿠키가 없는 세션을 사용하려면 쿼리 문자열에 세션 식별자를 배치해야 하며 이 문서의 쿼리 문자열 섹션에 설명된 보안 문제도 발생합니다.
1.7 클래스의 정적 속성 사용
이 방법은 클래스의 정적 속성을 사용하여 두 페이지 간에 값을 전송합니다. 정적 속성을 포함하는 클래스를 정의하고 정적 속성에 전송할 값을 할당하면 대상 페이지가 정적 속성을 통해 소스 페이지에서 전송할 값을 얻을 수 있습니다.
여러 데이터를 쉽게 전송할 수 있다는 장점이 있지만, 추가적인 프로그래밍이 필요하고, 프로그래밍 작업량이 늘어나고, 서버 메모리를 차지한다는 단점이 있다.
1.8 서버.전송 사용
Server.Transfer 메서드를 통해 현재 ASPX 파일에서 동일한 서버의 다른 ASPX 페이지로 실행 흐름을 전송하는 동안 양식 데이터나 쿼리 문자열을 유지할 수 있는 방법은 메서드의 두 번째 매개 변수를 True로 설정하는 것입니다. 첫 번째 페이지는 Server.Transfer("target page name.aspx", true)를 사용하고, 대상 페이지는 Ruquest.Form["Control Name"] 또는 Ruquest.QueryString["Control Name"]을 사용하여 데이터를 검색합니다. Asp.net2.0에서도 이와 같이 사용할 수 있으며 코드는 다음과 같습니다.
이전페이지 pg1;
pg1=(이전 페이지)Context.Handler;
응답.쓰기(pg1.이름);
설명: 이 코드는 대상 페이지에서 전달된 값을 검색하는 데 사용됩니다. Previous-Page는 원본 페이지의 클래스 이름이고, Name은 원본 페이지에 정의된 속성이며, 전송해야 하는 데이터가 여기에 저장됩니다. 기인하다.
이 방법을 사용하면 다른 페이지에서 해당 값에 액세스할 수 있도록 일부 속성을 생성하는 코드를 작성해야 합니다. 이 방법은 페이지 간에 값을 전달할 때 특히 유용합니다. 이 방법은 간단할 뿐만 아니라 객체 지향적입니다.
1.9 캐시
캐시는 강력한 데이터 작업 기능을 가지고 있으며, 키-값 쌍의 집합 형태로 데이터를 저장하며, 키워드를 지정하여 데이터 항목을 삽입하고 검색할 수 있습니다. 종속성 기반 종료 기능을 통해 캐시의 데이터가 적시에 업데이트되고 제거되는 방식을 정밀하게 제어할 수 있습니다. 내부적으로 잠금 관리를 수행할 수 있으며 Application 개체와 같이 직렬화 관리를 위해 Lock() 및 Unlock() 메서드를 사용할 필요가 없습니다. 단점은 사용 방법이 복잡하고, 잘못 사용하면 성능이 저하된다는 점입니다.
2. 다양한 페이지 점프 상황에서 사용할 수 있는 값 전송 방법
2.1 시나리오 1: 소스 페이지는 대상 페이지로 이동할 수 있으며 소스 페이지는 대상 페이지로 데이터를 전달합니다.
쿼리 문자열을 사용하는 것은 소량의 정보를 한 페이지에서 다른 페이지로 전송하는 데 간단하고 일반적으로 사용되는 방법이며 보안 문제가 없습니다. Server.Transfer 메서드를 사용하면 양식 데이터나 쿼리 문자열을 다른 페이지로 전달할 수도 있습니다. 초기 페이지의 HttpContext는 대상 페이지와 소스 페이지가 동일한 서버에 있을 때 사용할 수 있습니다.
2.2 사례 2: 페이지가 자체 페이지에 값을 전달합니다.
즉, 동일한 페이지에 대한 여러 요청에서 값을 유지함으로써 ViewState 속성은 기본적인 보안 기능을 제공합니다. 숨겨진 필드는 자체 페이지나 다른 페이지에 다시 게시되는 소량의 페이지 정보를 저장하는 데에도 사용할 수 있으며 보안 문제를 고려하지 않을 때 사용됩니다.
2.3 사례 3: 소스 페이지가 타겟 페이지에 값을 전달하지만, 소스 페이지가 타겟 페이지에 직접 연결될 수 없습니다.
여러 가지 방법이 있으며 어떤 방법을 사용할지는 특정 상황에 따라 다릅니다.
응용 프로그램: 보안이 문제가 되지 않는 경우 여러 사용자가 사용하고 자주 변경되지 않는 전역 정보를 저장합니다. 많은 양의 정보를 저장하지 마십시오. 세션: 개별 세션과 관련된 단기 정보를 저장하며 높은 보안이 필요합니다. 세션 상태에 많은 양의 정보를 저장하지 마세요. 세션 상태 개체는 애플리케이션의 각 세션 수명 동안 생성되고 유지됩니다. 많은 사용자를 지원하는 애플리케이션에서 이는 상당한 서버 리소스를 소비하고 확장성에 영향을 미칠 수 있습니다.
쿠키: 클라이언트 측에 소량의 정보를 저장해야 하고 보안 문제가 없을 때 사용됩니다. 클래스의 정적 속성은 여러 데이터의 전송을 용이하게 합니다.
캐시: 단일 사용자, 사용자 그룹 또는 모든 사용자에 대한 개체입니다. 여러 요청에 대한 데이터를 오랫동안 효율적으로 저장할 수 있습니다. 위의 방법은 3번의 경우뿐만 아니라 앞의 2번의 경우에도 사용됩니다. 불필요한 경우에는 최대한 적게 사용하면 됩니다. 그렇지 않으면 리소스 낭비가 발생하거나 프로그램이 복잡해집니다.