며칠 전 한 기업의 홈페이지에 고객의 서비스 시스템이 포함되어 있었는데, 해당 홈페이지가 임대 공간이라 고객의 시스템을 보관하기에는 부족하여 도메인 이름(도메인 이름)을 통일하기 위해 별도의 서버를 구축하였습니다. 다른 서버는 원래 서버와 동일합니다.) 도메인 이름이 너무 다릅니다), 프레임워크를 사용하여 원래 웹 사이트에 이 고객 시스템을 포함시켰으나 몇 가지 문제가 발생했습니다. 도메인 간 작업으로 인해 고객 시스템 사용자가 로그인한 후 세션 손실 문제가 발생하여 하루 종일 고민했습니다. 여기에도 해결책을 문의하기 위해 게시했습니다. http://bbs.bc-cn. net/dispbbs.asp ?boardID=10&ID=167628&page=3. 여러 방법으로 정보를 찾아본 끝에 나름대로의 분석과 실험을 통해 이 문제를 해결했는데, 오늘 누군가가 프로그램을 요청하는 것을 봐서 여러분께 공유드리고자 이 글을 썼습니다.
먼저 원리를 설명하세요.
시스템은 각 프로그램의 범위를 인식합니다. 일반적으로 IE의 기본값은 프로그램 범위입니다.
프레임워크에는 도메인 간 콘텐츠가 있기 때문에 먼저 프레임워크 프로그램 자체의 프로그램 범위를 기본값으로 설정하므로 프레임워크 내의 프로그램 범위를 확인할 수 없습니다.
이 IE를 프레임 내의 프로그램 범위로 기본 설정하기 위해 여러 점프를 사용했습니다.
먼저 이 프레임에서 벗어나 세션 값이 필요한 프레임 없는 웹 사이트 페이지(서버 B의 페이지라고 함)에 들어가서 시스템이 자동으로 sessionID를 생성할 수 있도록 이 페이지에서 세션을 생성한 후 다시 다음 페이지로 점프합니다. 시스템이 이 IE에 대한 세션 ID를 생성했기 때문에 이 IE가 닫히지 않는 한 시스템은 항상 이 IE가 이 프로그램의 범위 내에 있다고 생각합니다. 이 ID로 살아남을 수 있습니다.
이는 시스템을 속이는 목적을 달성합니다.
한 가지 더 덧붙이자면, 두 번째 점프에서는 다른 방법을 사용하는데, 그 이유는 프레임 외부의 정보를 버리고 프레임 내부의 정보를 저장해야 하기 때문입니다.
다른 점프 방법은 점프하기 전에 정보를 삭제하거나 저장합니다.
프로그램 구현:
파일 1:
프레임워크 파일: index.htm(서버 A에서 실행)
<html>
<머리>
<meta HTTP-EQUIV=컨텐트 유형 CONTENT=text/html;
<title>치하오 도어 산업</title>
</head>
<프레임 세트 행=1,* 테두리=0 프레임 테두리=0>
<프레임 이름=winBackLoad 스크롤링=noresize 대상=mainweb1 src=default_top.htm>
<프레임 이름=mainweb1 src=http://www.serverB.com/index.asp 스크롤=자동>
<노프레임>
<본문>
<p>이 페이지는 프레임을 사용하지만 귀하의 브라우저는 프레임을 지원하지 않습니다. </p>
</body>
</noframes>
</프레임세트>
</html>
파일 2: index.asp(서버 B에서 실행, 점프 및 sessionID 생성 기능)
<스크립트>
if (top.location !== self.location) {
top.location=self.location;
}
//이 JS의 목적은 프레임 외부에서 실행하는 것입니다.
</script>
<%
세션(xm2)=이면
세션(xm2)=eee
'위 문장의 목적은 단지 세션을 사용하고 시스템이 이 IE에 대한 sessionID를 생성하도록 하고 무한 루프 발생을 피하기 위해 점프되었는지 여부를 확인하는 것입니다.
%>
<META HTTP-EQUIV=REFRESH CONTENT=0;URL='http://www.serverA.com/index.htm'>
<%
, 위 문장은 프레임으로 돌아가는 것입니다. 참고: 위의 점프 방법만 사용하고 다음 점프 방법은 사용하지 마십시오.
또 다른
응답.리디렉션 index2.asp
'위 문장은 서버 B에서 프로그램을 실행하는 실제 점프입니다! 참고: 이 방법으로만 점프할 수 있습니다!
다음과 같은 경우 종료%>
위의 점프 후에 이 IE는 이미 서버 B의 세션 ID를 가지고 있습니다. 즉, 프레임이 서버 A의 메인 프레임에서 실행 중이더라도 서버 B의 세션이 손실되지 않도록 보장하여 크로스 도메인을 달성할 수 있습니다. 목적.