[WEB] 프레임(frame,iframe) 사용시 세션(session)값이 유지되지 않고 사라지는 문제해결

2011. 8. 12. 17:42WEB

*세션 생성하는 구간에만 코드를 작성해주면 된다

서로다른 도메인을 프레임이나 아이프레임을 사용하여 같이 보여주는경우 세션이 유지되지 않는 현상이 발생할때가 있다.

우선 해결방법은 소스 제일 상단에 아래와 같이 적어준다.
<?
header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');
?>

서로 다른 도메인을 포함하는 프레임 구조로 사이트를 IE6에서 열게 되면, 쿠키가 적용되지 않습니다.
이유는 마이크로 소프트에서 쿠키 정보의 남용을 막기 위해

p3p (Platform for Personal Preferences)

규약을 도입했기 때문입니다.
p3p (Platform for Personal Preferences) 규약은 W3C ( World wide Consortium )에서 만들어 졌습니다.
(마이크로 소프트 p3p 정책
http://msdn.microsoft.com/library/default.asp?url=/workshop/security/privacy/overview/createprivacypolicy.asp)
(W3C - p3p 규약 http://www.w3.org/TR/2002/REC-P3P-20020416/ )
그래서 다른 주소지로 연결되는 프레임구조로(특히 포워딩 고정 연결시) 웹페이지가 열리게 되면, 쿠키가 적용되지 않게 됩니다.

두가지 해결 방안이 있습니다.

첫번째는 쿠키를 적용하는 웹페이지에서 p3p 규약을 허용하는 HTTP 헤더를 추가하는 방법과
두번째는 쿠키를 적용하는 웹서버에서 p3p 규약을 허용하는 HTTP 헤더 추가하는 방법입니다.

========================================================== 무식하게 나마 세번째 방법이 있다.
세번째는 인터넷익스플로러에서 직접 설정을 해주는 것이다.
첫번째는 클라이언트 컴퓨터에서 볼때 설정해주는 것이다
즉 웹페이지에 직접 적어 넣는다.
<head> < meta http - equiv = "p3p" content = 'CP="CAO DSP AND SO " policyref="/w3c/p3p.xml"' > </head>
심플하게 php에 들어있는 자바스크립트로 만든 팝업등에서 써먹을 수도 있다.
두번째는 서버에서 직접 설정하는 것인데 왠지 께림찍해서 거부했다. 
conf/httpd.conf 에 다음과 같이 추가한다.
<IfModule mod_headers.c>
Header add P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""
Header set P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""
</IfModule>

세번째 무식한 방법
도구-인터넷옵션-개인정보-고급-자동쿠키덮어쓰기
(제3사 쿠키라고 한다.) 체크해주면 됨

기타 언어별 p3p 셋팅법
<meta http-equiv> 처럼 메타태그를 이용한 헤더 전송방법
아파치서버의 mod_headers 모듈을 이용한 방법
PHP 의 header 를 이용한 방법등이 있다.
jsp의 header
asp의 header
메타태그:
<meta http-equiv="p3p" content='CP="CAO DSP AND SO " policyref="/w3c/p3p.xml"' >
아파치서버 conf/httpd.conf :
<IfModule mod_headers.c>
#Header add P3P "CP=\"DSP CUR OTPi IND OTRi L FIN\""
</IfModule>

php :<?php
Header
("p3p: CP=\"CAO DSP AND SO ON\" policyref=\"/w3c/p3p.xml\"");
?>

혹은( 이상하게 아래것은 안묵히는것 같다.)

<? header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"'); ?>

asp: <% '//W3C P3P 규약설정 - ASP 버전
Response.AddHeader "P3P", "CP='ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC'"
%>

jsp: Response.setHeader("P3P","CP='CAO PSA CONi OTR OUR DEM ONL'");

p.s php에서 적용이 안돼서 팝업창과 부모창 모두에게

<?
@header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');
?>
<html>
<head>
<title> </title>
<meta http-equiv="p3p" content='CP="CAO DSP AND SO " policyref="/w3c/p3p.xml"' >
</head>


출처 : http://indirock.egloos.com/1497640



또 하나의 설명 페이지 내용은 아래와 같다.




예제출처 (http://www.thescripts.com/forum/thread512527.html)

A라는 도메인에서  iframe을 이용해서 B도메인에 있는 페이지를 불러왔다.
불려지는 B도메인의 웹페이지는 session변수를 생성하는데
iframe내에서 다른 B도메인내의 웹페이지로 이동을 하면 세션변수가 사라지는 현상이 발생한다.
Session.sessionID 를 이용해서 확인해 보면 계속해서 새로운 sessionID가 생성 됨을 확인할 수 있었다.
한마디로 세션이 저장이 되지않고 계속해서 세션쿠키가 새로 발급되는 현상으로 iframe뿐만 아니라 frame에서도 마찬가지였다.
또한, 이 문제는 FF에서는 정상적으로 세션변수가 유지되는 반면에 IE6에서는 세션변수가 사라졌다.


해결방법 (http://classicasp.aspfaq.com/general/why-won-t-my-session-variables-stick.html)
위의 링크를 따라가면 더더욱 많은 세션변수가 사라지는 현상과 그 해결방법에 대해나와있으니
참고하길 바라며 내가 겪은 세션변수 사라지는 현상의 해결방법은 다음과 같았다.

Internet Explorer 6에서 FRAMESET을 사용하면 세션 변수가 손실된다
MSDN기술문서 KB #323752
(한글로 번역되어있으니 기술 문서를 따라가면 원인과 해결방법에 대해 쉽게 알 수 있다.)
쿠키발급에 관한 정책문제이며
response.addHeader "P3P","CP=""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"""
또는
header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');

출처 : http://okkks.tistory.com/entry/php-tip세션-변수가-사라진다

'WEB' 카테고리의 다른 글

[WEB] 웹 사이트 성능 최적화 15개명  (0) 2011.10.11
[WEB] 웹 스트레스 테스트  (0) 2011.05.23
[WEB] http 와 https 의 차이가 뭘까요?  (0) 2010.04.29