http, https 혼용 Ajax 레이어팝업 로그인과 처리

tip 2013.04.27 12:44

[출처] http://itzone.tistory.com/198

 

* 문제 제기1

다른 구현은 둘째치고

http 페이지에 각종 컨트롤 함수를 정의해 놨는데

[v] 보안접속

하고 뭐든 하려 하면

javascript로 http <-> https 상호 처리시 '사용자 권한 없습니다' 오류가 뜬다.

몇시간의 삽질 끝에 한가지 해결을 보았다.


* 문제 제기2

물론 기본 페이지도 https 이고 팝업도 https 이면 아무런 오류도 안나지만

기본적으로 사이트 접속하면 http://xxx.com 이다.

이것을 https 와 혼용해서 쓰려니 골때리는 사건이 발생한다.


* 해결꼼수

-------------------------
 http
 -----------------
  http 레이어팝업

  히든 iframe
 -----------------
-------------------------

위와같은 페이지 구성으로 짜고

http 레이어팝업 = 로그인 폼

로그인 폼의 submit target="{히든 iframe}"

action="https://xxx.com/login_process.asp" 으로 posting!

히든 iframe 안의 https://xxx.com/login_process.asp 에서는

처리가 끝나면

http://xxx.com/popup_close.html 으로 이동시킨다.

http://xxx.com/popup_close.html 에서는

<script type="text/javascript">
//<![CDATA[
    parent.window.{부모창의 레이어팝업 닫는함수}();
//]]>
</script>

 

위와 같은 코드를 사용하면 된다.

'tip' 카테고리의 다른 글

dll , ocx 등록시 0x80020009 에러 발생  (0) 2013.04.27
XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
Trackback 0 : Comment 0

CDATA 섹션[XML 표준]

tip 2013.04.27 12:43

[출처] 

http://msdn.microsoft.com/ko-kr/library/ms256076(v=vs.80).aspx

http://insidesearch.tistory.com/entry/XML-CDATA-Section-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

CDATA 섹션에서는 CDATA 섹션에 의해 포함된 문자에 태그가 없음을 파서에 알릴 수 있습니다. 그러면 태그 문자가 나타날 수 있지만 태그가 필요하지 않은 섹션을 포함하는 문서를 훨씬 쉽게 만들 수 있습니다. CDATA 섹션은 일반적으로 스크립트 언어 내용과 샘플 XML 및 HTML 내용에 사용됩니다.

문서 구조에서 CDATA 섹션은 다음 구문을 사용합니다.

<![CDATA[An in-depth look at creating applications with XML, using <, >,]]>

XML 파서에서 초기 <![CDATA[를 발견한 경우 이를 요소나 엔터티 태그로 해석하지 않고 문자로 뒤에 나오는 내용을 보고합니다. 문자 참조는 CDATA 섹션에서 사용할 수 없습니다. 끝에 ]]>가 있을 경우 파서는 보고를 중지하고 일반 구문 분석으로 돌아갑니다.

예를 들어, 다음 CDATA 섹션 중 하나를 XML 문서에 포함할 수 있습니다. 이때 파서에서는 오류를 보고하지 않습니다.

 
<![CDATA[</this is malformed!</malformed</malformed & worse>]]>
<![CDATA[if (c<10)]]>

 

참고

CDATA 섹션 내의 내용은 XML 내용에 허용되는 문자 범위 내에 있어야 합니다. 제어 문자 및 호환 문자는 이러한 방법으로 이스케이프할 수 없습니다. 또한 ]]> 시퀀스는 섹션의 끝을 알리기 때문에 CDATA 섹션 내에 이 시퀀스를 표시할 수 없습니다. 즉, CDATA 섹션은 중첩될 수 없습니다. 일부 스크립트에서는 이 시퀀스가 표시됩니다. 스크립트 내에서는 일반적으로 ] ]>]]>를 대체할 수 있습니다

 

파싱 오류를 해결하려면 CDATA 섹션안에 들어가면 안되는 unicode range를 print문으로 XML을 덤프할 때 제거해야 한다. 이 unicode range는 XML 스펙 1.0에 다음과 같이 명기되어 있다.

Character Range
[2]   Char    ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */


CDATA Sections
[18]   CDSect    ::=   CDStart CData CDEnd
[19]   CDStart    ::=   '<![CDATA['
[20]   CData    ::=   (Char* - (Char* ']]>' Char*))
[21]   CDEnd    ::=   ']]>'


위를 보면 CDATA 섹션안의 문자열에는 2가지 들어가지 말아야 하는 조건이 있다.

첫째. CDATA 종료열인 ']]>' 문자열이 들어가면 안된다.
둘째. 유니코드 문자만 포함되어야 한다. 특히, 제어문자들은 포함되지 말아야 한다. 

'tip' 카테고리의 다른 글

XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
개발환경 설치  (0) 2013.04.27
Trackback 0 : Comment 0

svn merge

tip 2013.04.27 12:42
 
branch에서 작업한 내용을 trunk에 머지 시킬때

1. 일단 trunk에서 branch를 가지고 왔을때의 리비전을 확인해야 한다.
$ cd dev/branch/1.0
$ svn log --stop-on-copy 
branch를 checkout 받은 디렉토리에서 --stop-on-copy를 해주면 과거에 copy 명령이 일어난 지점까지만 로그를 보여준다.
해서 가장 아래에 있는 리비전을 확인하도록 한다. (copy가 일어난 시점의 리비전)

2. 그리고는 trunk를 checkout 받은 디렉토리에 가서 --dry-run 옵션으로 머지를 시도해본다. (머지하는데 확신이 든다면 이 과정은 생략해도 된다)
머지는 아까 확인한 copy가 일어난 시점의 리비전과 HEAD를 비교하여 이루어진다. (여기서는 2671 리비전이라고 가정) 
$ cd dev/trunk
$ svn merge --dry-run -r2671:HEAD svn://svn.example.co.kr/project/branches/1.0 ./
(--dry-run 옵션에 대해서는 여기에 정리를 해두었으니 참고)
해서 머지가 실행됬을때의 결과를 확인할 수 있다. 

3. 대충 훑어보고 원하는 결과가 맞다면 실제로 머지를 실행. (위 명령에서 --dry-run 옵션만 빼면 된다)
$ svn merge -r2671:HEAD svn://svn.test.co.kr/project/branches/1.0 ./ 
머지가 실행된 후 충돌이 난 파일들은 작업자가 확인 후에 충돌을 해소한 후에 trunk로 최종 커밋을 해주면 된다.
충돌난 파일들의 임시파일들은 svn resolved 명령어로 해결. (이곳 참고)

간혹 한번 생성해서 trunk로의 머지까지 완료된 branch를 머지된 이후에도 계속 사용하는 경우가 있는데
이 경우 해당 branch에서 새로운 프로젝트 작업 후 trunk로의 머지를 할 경우에는 리비전 명시에 주의를 해야 한다.
처음 merge시에는 copy된 리비전을 알기위해 --stop-on-copy 옵션을 썼지만, 같은 브랜치를 두번째로 merge 할 경우에는 첫번째 머지한 이후의 리비전과 HEAD를 비교해야 하므로, 첫번째 머지했을때의 리비전을 작업자가 관리해야 하는 불편함이 생긴다.
그래서 되도록이면 두번째 프로젝트를 시작할 경우에는 머지가 완료된 해당 브랜치를 그대로 사용하기보다, trunk에서 새로운 브랜치를 copy해와서 작업하는게 더 좋을 듯 하다.

'tip' 카테고리의 다른 글

http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
개발환경 설치  (0) 2013.04.27
sc command  (0) 2013.04.27
Trackback 0 : Comment 0