왜 당신이 이제까지 사용 asp.net's ViewState 저장체 세션을 통해 스토리지 목적입니까?

StackOverflow https://stackoverflow.com/questions/575568

문제

보기 때문에 세션 저장이 세션-global 하나 이상의 페이지,왜 당신이 이제까지 사용하려면 viewstate 값을 보유?

그것은 보인다 말도의 종류를 보내는 모든 종류의 정보 이외의 다른 몇 가지 작은 쿼리 문자열 값에서 앞뒤로 클라이언트가 서버입니다.내 말은 무엇을 낭비의 대역폭(!), 단순히 저장을위한 목적입니다.세션 동안,세계에 걸쳐 여러 페이지가 같이 보이는 완전히 우수한 대안을 viewstate.

특히 asp.net ajax 컨트롤 및 개,viewstate 수 있는 신속하게 비 대한 추적을 다양한 상태 및 변수의 모든 사람들이 다른 통제 및 html 요소입니다.

그러나 그 이유는 viewstate 저장을위한 페이지를 변수와 개체까요?

어쩌면 내가 누락 또 다른 좋은 사용한 페이지의 viewstate 저장,사람을 알고 뭔가 거기에 있습니까?

끝까지 읽어 주셔서 감사합니다.

편집:모두가 훌륭한 대답 죄송하지 않은 경우 선택은 당신입니다.

도움이 되었습니까?

해결책

세션이 다 떨어지고 ViewState는 그렇지 않습니다. 한 시간 후에 돌아갈 수 있으며 ViewState는 여전히 사용할 수 있습니다. ViewState는 웹 사이트에서 돌아 오거나 앞으로 나아갈 때 세션이 변경 될 때 지속적으로 사용할 수 있습니다.

다른 팁

ViewState 또는 Session의 모든 이유는 웹을 무국적 시스템에서 역동적이고 맞춤형 경험으로 전환하기 때문입니다. 사용자가 페이지를 요청하면 사용자가 경험에서 중단 된 위치를 재개 할 수있는 유일한 방법은 서버 나 사용자의 클라이언트에서 상태를 기억하는 것입니다.

ViewState는 클라이언트의 사용자 상태를 기억하는 메커니즘입니다. 세션은 서버에서 사용자의 상태를 기억하는 메커니즘입니다.

ViewState는 과도 스토리지 메커니즘입니다. ViewState를 사용하는 컨트롤은 상태가 HTML 페이지에 숨겨진 입력으로 렌더링됩니다. 변조를 방지하기 위해 서명됩니다. 그러나 암호화되지 않았으므로 민감한 것을 피하고 싶을 것입니다. ViewState는 일련의 여러 요청 (페이지로드)에 게시하려는 상황에 유용합니다. 이에 대한 예는 사용자가 잘못된 이메일 주소 나 무언가를 입력했을 수 있으며 사용자가 제출하기 전과 같이 양식을 복원하려고하기 때문에 양식이 검증되지 않은 경우입니다. 이것의 단점은 Viewstate가 배고픈 짐승이며 페이지 크기에 쉽게 30-50%를 추가 할 수 있다는 것입니다.

반면에 세션은 서버에 저장됩니다. 클라이언트는 서버에게 메모리 블록이 자신의 것인지 알려주는 토큰을 얻습니다. 데이터가 사용자에게 반복해서 재전송되지 않기 때문에 ViewState보다 훨씬 안전 할 수 있습니다. 그래도 트레이드 오프가 있습니다. 서버가 메모리가 부족할 수 있습니다. 또는 세션이 중단되면 사용자가 데이터를 잃을 수 있습니다.

일반적으로 사용할 "올바른"답변은 없습니다. 그것은 당신이 성취하려는 것에 관한 것입니다.

컨트롤과 관련하여 대부분의 일은 ViewState를 사용해야합니다. 그러나 민감한 정보를 다루는 경우 세션을 고려하십시오. 특정 페이지 세트에 대한 데이터가있는 경우 ViewState를 사용하십시오. 사용자가 사이트를 방문하는 동안 필요한 데이터 인 경우 고위 세션입니다.

예를 들어 애플리케이션이 컴퓨터 팜에서 실행 중일 수 있고 SQL Server를 사용하도록 세션을 구성 할 수없는 경우 (또는 SQL Server를 사용하는 것이 성능이 너무 많습니다)

ViewState와 세션마다 범위가 다릅니다. ViewState는 "Postbacks"동안 다소 일시적인 데이터를 저장하도록 설계되었으며 세션은 중요한 세션 상태 데이터를 저장하는 데 사용됩니다. 특정 "페이지 세션"과 관련된 상태에 ViewState를 사용하는 것이 좋습니다.

ViewState의 정상적인 동작이 마음에 들지 않는다면, 자신의 pagestatePersister를 작성 하고이 객체가 세션을 사용하거나 memcached와 같은 지속성을 수행하도록하는 것은 매우 간단합니다. 그런 다음 기본 지속 메커니즘을 완전히 무시할 수 있습니다.

그런 다음 좋은 점은 .NET Framework에서 표준 웹 컨트롤을 완벽하게 사용할 수 있다는 것입니다.이 유형의 데이터에 ViewState/ControlState를 사용하여 ViewState를 팽팽하게하지 않으면 서 있습니다. 서버 메모리 지속 메커니즘은 매우 효율적일 수 있습니다.

실제로 귀하의 질문에 대한 직접적인 답변은 아니지만 문제를 해결할 수 있습니다.

ViewState Server 측면을 저장하여 클라이언트의 페이로드를 제거 할 수 있습니다.

상속 페이지 클래스를 작성하고 PagestatePersister를 무시하십시오.http://msdn.microsoft.com/en-us/library/system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

ViewState는 본질적으로 서버에 업로드하고 각 요청에 따라 구문 분석 해야하는 숨겨진 입력입니다. 이 필드는 일반적으로 프로그래머가 행복하게 모르는 경우가 많으며 상당히 커질 수 있습니다. 광대역 사용자조차도 업스트림 대역폭이 매우 제한되어 있기 때문에 문제를 제시하는 많은 사이트의 경우.

모든 사용자가 서버에 대한 고속 LAN 액세스 권한이 있지만 세션 데이터를 유지하는 데 사용할 수있는 RAM이 제한되어있는 인트라넷 사이트에서는 더 합리적 일 수 있습니다.

귀하의 질문에 대한 답변은 아니지만 귀하의 가정 중 하나가 잘못되었습니다.

세션 ID는 URL에서 전달 될 수 있습니다. 세션에는 쿠키가 필요하지 않습니다.

http://msdn.microsoft.com/en-us/library/aa479314.aspx

<sessionState cookieless="true" />

당신이 하고 있는 응용 프로그램 viewstate 팽창,대부분의 경우,문제가 되지 않습니다,그것의 더 나은 상점 페이지에서 특정 데이터 viewstate 기 때문에 그것은 당신의 서버가 더 나은 수행합니다.는 경우 이동에 미친 세션을,또는 캐싱을 그 문제에 관해서는,당신을 해칠 수 있는 자신이 더 당신은 자신을 도와.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top