본문 바로가기

Projects/Server

제3사 쿠키 문제로 제로보드 로그인 풀림 제거 방법

아이프레임에 제로보드의 아웃로그인을 추가하였는데
제로보드의 위치는 예를 들어 www.aaa.com
그리고 실제 사이트의 주소는 예를 들어www.bbb.com
였습니다.

이때 실제 사이트로 접속해서 생기는 쿠키를 당연히 다른 사이트에 위치한 제로보드가 사용하지 못해서 로그인이 안되는 경우가 발생합니다.

그것은 "제3자 쿠키 허용 문제"라고 하는 가 봅니다.

익스플로러 6에서 도구 -> 인터넷 옵션 -> 개인정보 -> 고급에서 허용함으로써 가능하지만
아무래도 클라이언트가 해야할 일이 발생하기 때문에
제로보드의 login_check.php의 상단에 코드를 수정하여 해결할 수 있는 방법을 찾아냈습니다.

출처는 제로보드 사이트입니다.

출처 : http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=6&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=outlogin&select_arrange=headnum&desc=asc&no=7235


==================================================================================
로그인 풀림 경험

*경험해본 로그인 풀림현상
1 도메인 포워딩을 받은 (예_abcdabcd.mx.lx)이런곳으로 들어가면 로그인이 풀린다.
2 제로보드 파일을 많이 변경하면 풀린다.
3 그래도 가끔 풀리던데 이유는 모르겠다.

이렇게 3가지 입니다.
1번째 방법은 포워딩받은것 대신 원래있던 주소로 하면 되더군요
도메인 포워딩이 된걸로 사용하고 싶다면
<?
   $_zb_url = "http://newcdk.mizc.com/bbs/";
   $_zb_path = "/home/newcdk/public_html/bbs/";
   include $_zb_path."outlogin.php";
?>
이렇게 되잇는 것을
<?
   $_zb_url = "http://abcdabcd.mx.lx/bbs/";
   $_zb_path = "/home/newcdk/public_html/bbs/";
   include $_zb_path."outlogin.php";
?>
이런식으로 하면 되는 것 같더군요

2번째 방법은 제로보드를 엔지오에서 다시 받아 새로 받은것을 업로드하면 간단히 되더군요

3번재 방법은 원인조차 알지 못하겠으나 이런경우는 매우드믑니다.

아주 사소한 경험이지만 어쩌면 도움이 될것같아 올립니다.

밑에 있는 것은 몇가지를 복사해서 올려봤습니다.

그럼 모두 풀림현상을 이겨내보세요

수고하십시오.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
작성자 시와나무

login.php
--------------------------------------------------
<?
$_zb_level = 10;
$_zb_skin = "default";
$_zb_url = "http://도메인/제로보드가 설치된 폴더명/";
$_zb_path = "/제로보드가 설치된 절대경로/";
include $_zb_path."outlogin.php";
?>

<? print_outlogin("default", 1, 10) ?>
--------------------------------------------------

대부분 이런방법을 사용하지요.
저의 경우 여기서 문제는 login.php만을 실행하면
로그인이 풀리는 현상이 생김니다.
게시판을 참조해봐도 마땅히 해결할 수 없었는데,
그중에서 login.php를 include하는 방법으로

login.htm
--------------------------------------------------
<? include "./login.php"; ?>
--------------------------------------------------
화일을 만들어 그 login.htm를 실행해보니
로그인 풀림현상이 없어졌습니다.

그런데 제가 하려는 것은 레이어안에 아웃로긴을 만들어
필요시에만 자바스크립트로 보여주는 형태로 만들려고 했습니다.

main.htm
--------------------------------------------------
<div>
<? include "./login.php"; ?>
</div>
--------------------------------------------------
이런식으로...
그런데 <div></div>안에 <? include "./login.php"; ?>를
넣으면 여기서 다시 풀림현상이 생겼습니다.

결론을 말하자면

login.php
--------------------------------------------------
<? print_outlogin("uknow_outlogin", 1, 10) ; ?>
--------------------------------------------------

main.htm
--------------------------------------------------
<?
$_zb_level = 10;
$_zb_skin = "default";
$_zb_url = "http://도메인/제로보드가 설치된 폴더명/";
$_zb_path = "/제로보드가 설치된 절대경로/";
include $_zb_path."outlogin.php";
?>

<div>
<? include "./login.php"; ?>
</div>
--------------------------------------------------
로 했더니 풀림현상이 없어지더군요.
일단 저는 이렇게 해서 해결했네요.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

작성자 : 양종현

일단 lib.php 파일을 다운 받아서 ㅎ 밑에 내용 처럼 바꺼주세요.
정확히 말하자면 로그인이 풀린건 아니라고 봐야겠죠.

4.1pl4 패치후 제로보드에서는 외부로그인이 로그인된 화면이 나오지만, 웹페이지에선 외부로그인이 로그인전의 화면상태로 나타나는 경우가 있더군요.

4.1pl2와의 차이점을 비교해보니, 명령순서에 의해 영향을 받는것을 알았습니다.

/*******************************************************************************
* include 되었는지를 검사
*******************************************************************************/
        if($_zb_lib_included) return;
        $_zb_lib_included = true;

        $_startTime=getmicrotime();


/*******************************************************************************
* 기본 변수 초기화. (php의 오류같지 않은 오류 때문에;; ㅡㅡ+)
******************************************************************************/
        unset($member);
        unset($group);
        unset($setup);

위와같이 include되었는지 검사하는것을 먼저 설정해주니 웹페이지에서의 로그인 화면이 정상적으로 돌아왔습니다.

include를 저것 처럼 바꿔주면 한결 나아지는 듯이 로그인 풀리는 현상이 없어집니다만. 문제가 약간 생겨서 밑에 보세요.

login_check.php 이것을 다운받아서 ㅎ 제일 상단에 밑에 있는 곳을 복사해주세요 .header 이걸로 된거

header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');

<? 거기 보시면 이게 있는데 밑에 다가 ㅎ 하시고 lip.php 파일 역시 @header 이것을 다지워주시고
위에 파일로 교체 해주시면 로그인 잘됩니다.

P3P를 간단히 말하자면 웹 사이트 방문시에 사용자가 개인정보 공개의 단계를 스스로 조절할수
있는 한단계 발전된 개인정보 보호정책이라고 생각하면 됩니다. ( 더 자세한 사항은 검색을...)

IE 6 부터 이 P3P 정책을 도입함에 따라서 제3사 쿠키 즉...도메인이 www.aaa.com 이고
페이지는 프레임을 사용해서 www.bbb.com 으로 사용되고 있을 때 제3사는 www.bbb.com 이 될겁니다.

제로보드 로그인을 이런식으로 구성할 경우에 로그인에 당연히 문제가 생기겠지요.
소스를 자세히 훓어 보지 않아서 정확히는 모르겠지만 제로보드 또한 쿠키를 사용을 할테니까요.
제로보드 뿐만이 아니라 모든 웹 페이지에서 마찬가지입니다.

제대로 쿠키적용을 시키려면 브라우저에서 개인정보 설정을 낮음으로 설정을 하거나
웹서버 P3P 설정 부분을 추가하거나 변경하는 방법이 있는것으로 들었습니다.

이제 서론이 끝났군요. -_-;

아뭏든 프레임을 사용하여 도메인과 다른 페이지에서 쿠키를 이용하여 로그인을 적용시키려고
할때 헤더에 P3P 정보를 보내서 다른 설정없이 쿠키를 사용할수 있는 팁입니다.
얼마전에 웹 사이트를 구축하는 도중에 멀티도메인 문제로 PHPschool 에서 찾은 내용입니다.
(출처를 정확히 밝혀야 예의겠지만...;)

참고로 저는 admin 부분만 적용을 시켜봤기 때문에 일반 로그인은 신경을 쓰지 않았습니다.
admin 로그인은 login_check.php 라는 감을 잡고 다음 소스를 삽입하였습니다.

header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');

이 소스를 login_check.php 파일 최상단에 삽입하셔야 됩니다.

이 소스를 추가한 후에 제3사 쿠키도 적용이 잘 되는 것을 확인하였고 어떤 문제가 발생하는지는 알수 없습니다.
로그인 부분에 문제가 있으신 분들은 한번 적용 시켜보시는 것도 나쁘지 않다고 생각됩니다.

레쯔님의 .. 말처럼. 자료를 참고합니다.

1. lib.php 파일을 열어 두 항목의 순서를 아래와같이 바꿔준다.

/*******************************************************************************
* include 되었는지를 검사
******************************************************************************/
if(defined("_zb_lib_included")) return;
define("_zb_lib_included",true);

$_startTime=getmicrotime();

/*******************************************************************************
* 기본 변수 초기화. (php의 오류같지 않은 오류 때문에;; ㅡㅡ+)
******************************************************************************/
unset($member);
unset($group);
unset($setup);

2. 아래의 헤더 정보를 복사한다.

@header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"');

3. lib.php파일 13번째줄에 있는 헤더정보를 지우고 복사한 내용을 삽입한다.

4. 같은방법으로 login_check.php를 열어서 맨 위 <? 표시 바로 아래줄에 삽입한다.

5. 설정 완료!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★작성자 jdari  

자동로그인을 체크해도 익스창을 닫고,다시 열때 자동 로그인이 풀려서,일주일간을 엄청나게 올라온팁(6~7가지 적용)을

사용하여도 방법이 없었는데,이곳 질문 게시판에서,답을 얻었습니다. 지금 아이디가 생각나지 않는군요.쩌비님이신가..의

해결 방법을 보고 적용한 결과,로그인 풀림이 신기하게도 없어졌습니다.너무 고맙습니다.

저는 무식하기 때문에 고수님들께서 왜? 아래에 소스를 주석처리 시키니,로그인 풀림이 없어졌는지

설명 해주시면 감사하겠습니다.세션에 관한 이야기 같은데..허접이라


아래 소스입니다. lib.php 파일중

/*
if(!$_zb_path) {
z_unlink($_zb_path.$_zbDefaultSetup[session_path]."/zbSessionID_".$zbSessionID.".php");
makeZBSessionID($data[no]);
}
*/

윗부분을 닫은 것입니다.

이것저것 방법을 다써봐도  로그인 풀리시는분 마지막 이라 생각하시고,적용 한번 해보세요.

다른 부작용은 없습니다.현재까지....