본문 바로가기
IT-개발,DB

[개발/asp.net] 웹폼에서 Form의 action을 다른페이지로 지정할때 주의

by SB리치퍼슨 2010. 11. 23.

현재 참여하고 있는 프로젝트를 하면서 SSL을 적용하다 보니 로그인 처리에서 문제가 발생했습니다.

 

일반로그인 처리는 해당페이지의 비하인드코드에서 하면 되지만, SSL을 적용하려면 로그인 처리 페이지를 https://로 접근해야 합니다.

 

위와 같은 경우 Get방식으로 로그인정보를 보내어 처리하면 무리는 없지만

Post방식으로 할 경우 단순히 Form태그의 Action만 바꿔서는 안됩니다.

 

보통 aspx페이지에서는 자체 페이지마다 viewstate값을 가지고 있는 hidden 컨트롤이 있습니다.

 

<input type="hidden" name="__VIEWSTATE" value="dDw3NjMwDYbDxpP..." />

 

이 값을 post방식으로 해서 다른페이지에 보내는 경우 다음과 같은 에러가 발생합니다.

에러 내용을 보시면 알겠지만 machinekey 구성을 수정하라고 하는군요...

 

System.Web.HttpException: Authentication of viewstate failed. 

1) If this is a cluster, edit <machineKey> configuration so all servers use the same validationKey and validation algorithm.  AutoGenerate cannot be used in a cluster. 

2) Viewstate can only be posted back to the same page. 

3) The viewstate for this page might be corrupted. -

--> System.Web.HttpException: 데이터가 유효한지 확인할 수 없습니다.

 

수정하시기가 구찮으시다면.. 아래 소스코드 처럼 __VIEWSTATE의 값은 넘기지 않도록 합니다.

 

<SCRIPT language="javascript">
<!--
function LoginCheck( form )
{
   form.__VIEWSTATE.disabled = true;

   // post방식으로 현재페이지의 컨트롤값을 다른페이지로 그대로 넘기는 되는경우

   // aspx에서는 클라이언트에서 접근할수 있는 아이디값이 컴파일후 바뀐다는것을

   // 유념하셔야 합니다. 아래 처럼 별도의 hidden필드를 만들어서 입력한 값이나

   // 클라이언트 아이디를 넘겨서 다음 페이지에서 정상적으로 값을 받을수 있도록 합니다.
   form.Uid.value = idBox.value;
   form.Pwd.value = pwdBox.value;


   var submitUrl = "https://<%=Request.Url.Host%>/LoginProcess.aspx" ;

   form.action = submitUrl;


   form.submit();
   return true;
}
//-->
</SCRIPT>

출처 : http://blog.naver.com/tear230/100014257847

 
반응형

댓글