현재 참여하고 있는 프로젝트를 하면서 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
'IT-개발,DB' 카테고리의 다른 글
[개발/asp.net] 객체를 다른 페이지로 넘기기 (0) | 2010.12.01 |
---|---|
[개발/IIS] IIS 6.0 + ASP.NET 에서 HTTP 압축 사용하기 (0) | 2010.11.23 |
[개발/asp.net] 웹페이지의 DataGrid 내용만 엑셀로 다운로드 (0) | 2010.11.23 |
[개발/asp.net] GET방식으로 한글 넘길때 인코딩 문제 (0) | 2010.11.19 |
[개발] 자바스크립트, 자식창에서 부모창의 이벤트 실행하기 (0) | 2010.11.19 |
댓글