programing

때때로 Invalid view state 오류가 발생하면 무시해야 합니까?

bestprogram 2023. 10. 19. 22:37

때때로 Invalid view state 오류가 발생하면 무시해야 합니까?

ASP에 대한 로그에서 가끔(매일 한 번씩) 다음과 같은 유형의 오류가 발생합니다.NET 3.5 응용 프로그램

  • 보기 상태가 잘못되었습니다.
  • 잘못된 포스트백 또는 콜백 인수

ASP를 사용할 때 종종 발생하는 "그냥 일어나는 일"입니까?NET 어플리케이션?문제의 원인이 무엇인지 진단하기 위해 많은 시간을 할애할 것을 권장하는 사람이 있습니까?

뭐, 상황에 따라 다르겠죠.보기 상태가 올바르지 않은 경우 다양한 이유로 인해 발생할 수 있습니다.

  1. 뷰 상태가 너무 커서 사용자가 페이지에 포스트백을 발생시키기 전에 렌더링을 완료하지 못했습니다.수정 방법은 일반적으로 포스트백을 트리거하는 모든 컨트롤을 비활성화하고 페이지 로드가 완료되면 클라이언트 측에서 활성화하는 것입니다. http://blogs.msdn.com/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx 참조.
  2. 보안상의 이유로 뷰 상태 MAC을 사용하고 있지만 컴퓨터 키를 설정하지 않았으며 애플리케이션 풀에서 새 키를 생성하는 것을 재활용했습니다.ViewStateUserKey를 설정하는 것도 잊지 마십시오.
  3. 숨겨진 양식 필드를 잘라내는 맥에서 이전 버전의 IE를 사용하는 사용자가 있습니다.이 경우 보기 상태를 페이지 밖에서 세션 상태로 이동해야 합니다.
  4. Viewstate MAC 문제는 일반적으로 웹 팜에 있으며 web.config에서 기계 키를 설정하는 것을 잊어버렸음을 나타냅니다.그러나 이렇게 했다면 아마도 나쁜 일을 하려는 사람일 것입니다(댓글을 게시하는 봇, 비활성화된 컨트롤에 대한 이벤트를 트리거하려는 사람 등).잠재적인 보안 문제를 배제하기 위해서라도 그 원인을 추적해야 합니다.

보기 상태 또는 이벤트 유효성 검사를 끄지 않는 것은 무엇이든 상관없습니다.

한 가지 문제는 사용자 라우터가 양식 필드를 잘라내는 것입니다.이 방법은 Web.config에서 MaxPageStateFieldLength를 작은 숫자(예: 100)로 설정하면 ViewState가 작은 청크로 분할됩니다.그것은 매우 간단하며, 이 기사는 그것을 충분히 설명합니다.

예외는 때때로 "그냥" 일어나는 것이 아닙니다.이는 항상 유효한 이유로 발생하며, 일부는 이미 다른 답변에 나열되어 있습니다.

그러나 ViewState에서 발생하는 문제를 완화하기 위해서는 이를 모두 비활성화하는 것이 좋습니다.ASP로서.NET 개발자는 ViewState가 기본값이기 때문에 필요하지 않은 모든 종류의 장소에서 ViewState를 사용하는 경향이 있습니다.저는 보통 컨트롤 사용을 고려하기 전에 정적 html을 사용하는 것을 생각합니다.컨트롤을 사용하기로 결정한 경우 ViewState를 활성화해야 하는지 생각해 보십시오.사용 불가능으로 설정하면 페이지 로드 시간이 단축되는 경우가 많으므로 가능한 경우 수행합니다.

기본적으로 비활성화되어 사람들이 이런 생각을 할 수 밖에 없었으면 좋겠는데 그렇지 않습니다.

의견 답변 업데이트:

우선 ViewState를 끌 수 있는 3가지 기회를 생각해 봅니다.

  1. 모든 포스트백에 데이터가 로드되면 ViewState를 비활성화합니다.보통 첫 번째 로드에 데이터를 로드한 다음 AJAX 요청을 사용하여 데이터를 다시 로드/업데이트하는 AJAX 지원 사이트(UpdatePanel 종류가 아닌 실제 AJAX)를 구축하는 경우가 이에 해당됩니다.경우에 따라서는 ViewState를 비활성화하는 유일한 목적으로 방문할 때마다 데이터를 로드한 후 대신 서버에 데이터를 캐시할 수도 있습니다.

  2. 정적인 컨텐츠에 데이터베이스 바인딩하는 경우 ViewState를 비활성화하는 것도 고려할 수 있습니다.가끔 데이터베이스의 작은 정적 기반 데이터 테이블에 데이터 바인딩된 목록이나 그와 유사한 것을 발견합니다.이는 위험할 수 있지만 데이터가 변경되지 않을 것으로 확신되면 데이터를 정적 컨텐츠로 페이지에 이동시킬 수 있습니다(데이터의 정적 복사본을 여러 개 갖지 않도록 별도의 컨트롤로 감쌀 수 있음).하지만 데이터가 변경되면 수동으로 변경해야 합니다.

  3. Label(라벨)과 같은 간단한 컨트롤은 ViewState(보기 상태)를 비활성화하는 데 적합한 경우가 많습니다.

마침내 ASP로 전환할 수 있었습니다.NET MVC 프레임워크 및 이러한 문제에 대해 영원히 작별 인사를 드립니다. 다른 문제가 있더라도 그렇게 할 계획입니다. ;)

BlowDart는 Invalid View 상태 문제에 대한 정답을 가지고 있습니다.아마도 당신의 앱 풀이 재활용되고 암호화 키를 바꾸는 것일 것입니다.

지원에 대해서는 다음 게시물을 참조하십시오.

의 잘못된 보기 상태 문제입니다.NET어플리케이션

ASP를 사용하여 사용자 로그인을 지속합니다.순멤버십

잘못된 보기 상태로 로거, 사용자 또는 웹 사이트에 대한 값이 없습니다. 최종 사용자는 이러한 오류를 볼 수 없습니다. 이 오류를 방지하기 위해 다음 In Global.ascx를 추가해 보십시오.

void Application_Error(object sender, EventArgs e)
    {          
                if (ex is HttpException && ex.InnerException is ViewStateException)
                {
                    Response.Redirect(Request.Url.AbsoluteUri);
                    return;
                }
    }

자세한 내용은 다음 링크를 참조하십시오.

https://www.karpach.com/viewstateexception-invalid-viewstate.htm

전자에 대해 할 수 있는 일은 별로 없습니다. 나는 그러한 예외를 트랩하고 "당신이 사용하던 페이지가 만료되었습니다."라는 메시지와 함께 오류 페이지로 바운드합니다.이 문제는 일반적으로 이미 입력한 데이터가 있는 페이지를 다시 방문하려고 할 때 발생합니다."

UpdatePanel을 사용하는 상당히 큰 페이지에서 후자를 가장 많이 볼 수 있습니다.페이지 로딩이 완료되기 전에 사용자가 다시 포스팅(또는 콜백 가능성도 있음)할 때인 것 같습니다. 그래서 페이지 끝에 태그가 지정되는 모든 자바스크립트가 아직 실행되지 않았습니다.

다시 말하지만, 오류 페이지에 적절하게 우호적인 메시지를 표시하는 것 외에는 할 수 있는 일이 별로 없습니다.

로그에 이런 예외가 있었는데 여기 나열된 다른 것들과는 매우 다른 원인이 있었습니다.매우 큰 ViewState가 있었는데, 이 문제의 일부입니다.그러나 이는 또 다른 문제와 결합되어 이러한 예외(그리고 때로는 IIS의 잘못된 응답)를 야기했습니다.

제가 작업하고 있는 코드 베이스에는 더블 클릭을 피하기 위한 화려한 코드가 있으며, 그 일환으로 첫 번째 클릭 후 버튼을 비활성화하는 모든 버튼 클릭 이벤트의 자바스크립트에 일부 내용을 추가한 다음 일반적인 포스트백을 수행합니다.그러나 내 버튼 중 일부에 이미 에 의해 생성된 포스트백 호출이 있었기 때문에 그렇게 포스트백을 호출하는 것이 문제가 되었습니다.NET 자동으로.그래서 저는 더블 포스트백을 갖게 되었고, 그 중 하나는 보기 상태가 올바르지 않았습니다.여분의 포스트백을 제거하는 것이 저의 예외를 막았습니다.

ViewState의 크기를 대폭 줄여야 한다는 것은 잘 알고 있습니다. 하지만 이는 기존 코드 기반이 크기 때문에 이와 같은 변화는 매우 침습적일 것입니다.

이 오류를 무시하는 것은 아마도 좋지 않을 것입니다.위의 모든 답변 외에 보기 상태의 크기를 조사하는 것도 고려해 볼 수 있습니다.큰 보기 상태는 프록시 서버에서 잘라낼 수 있습니다.

보기 상태가 큰 경우 ASP.net 추적을 사용하여 어떤 컨트롤이 보기 상태를 사용하고 있는지, 어디에서 끌 수 있는지 확인하는 것이 좋습니다.

Wayne Walter Berry(웨인 월터 베리)는 이 블로그 포스트에서 페이지에 XHTML 준수 마크업을 하지 않고 IE8에서 XHTML docype을 사용할 수 있다고 말합니다.이로 인해 IE8이 스크램블된 매개 변수를 스크립트 리소스로 보낼 수 있습니다.axd 및 잘못된 뷰 상태 예외를 던집니다.

그는 모든 자바스크립트 블록이 다음과 같이 랩핑되어 있는지 확인할 것을 추천합니다.// <![CDATA[]]>또는 단순히 문서 유형을 변경하는 것(페이지에 다른 CSS/styling 문제가 발생할 수 있음).

업데이트: Microsoft는 IE 8에 대한 다음 버그 수정이 이 문제를 해결한다고 발표했습니다.
http://blogs.msdn.com/ieinternals/archive/2010/04/01/IE8-Lookahead-Downloader-Fixed.aspx

언급URL : https://stackoverflow.com/questions/576990/should-i-ignore-the-occasional-invalid-viewstate-error