세션 질문입니다!

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
세션 질문입니다!

QA

세션 질문입니다!

본문

그누보드 2개 설치 후 로그인 연동 작업중인데요..

세션 질문이 있어서요.

 

쿠키값을 확인해 보면 로그인 후 'PHPSESSID'로 세션이 생성이 되는데...

'G5GNU1PHPSESSID'로 세션이 하나 더 생성되는데 둘은 무슨 차이 인가요?

 

멀티사이트라 같은 도메인 하위 폴더의 또 다른 그누2사이트에 로그인하면

'G5GNU2PHPSESSID'로 세션이 또 생성되구요..

실제 사이트 안에서 글쓰기 회원정보수정 등의 페이지에서 사용자를 분별하는건 

'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'로 하는건가요?

 

그럼 'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'를 일치시켜야 하는건가요?

이 질문에 댓글 쓰기 :

답변 3

https://github.com/gnuboard/gnuboard5/blob/master/common.php#L244

과거에 이부분의 로직이 남긴 쿠키가 남아있는건 아닐까요?

해당 도메인의 쿠키를 모두 삭제 후 새로 접속 해보세요.

쿠키 삭제 후 새로 접속해도 동일합니다.
위에 thisgun 님이 답변 해 주신 내용이 맞는 것 같은데...
세션키를 일치시키면 되는 간단한 문제 같은데 php가 익숙치 않아서인지 너무 안풀리네요.. ㅠㅠ
베르만님의 답변들도 그간 큰 도움이 되어 정말 감사드리고 있습니다!

네 말씀하신 부분 모두 맞는것 같습니다.

다만 세션키를 일치시키는것 외에
체크시 비교하는 부분이라던지 커스텀 된 부분이라던지 등이 변수가 될수 있습니다.

우선 다른 커스텀부분은 제외하고
체크시 비교하는 부분만 먼저 확인해본다면

각 설치마다 랜덤하게 할당되어
data/dbconfig.php 에 들어가는 G5_TOKEN_ENCRYPTION_KEY 값을 키로 해서
get_token_encryption_key 로 비교하기 때문에
https://github.com/gnuboard/gnuboard5/blob/master/lib/common.lib.php#L4118

data/dbconfig.php 를 양쪽 동일하게 맞출 수 없다면
G5_TOKEN_ENCRYPTION_KEY 값의 일치여부도 확인해보시기 바랍니다.

답변감사합니다.
말씀주신 부분은 제가 부족해서 더 공부해야 할 부분인 것 같습니다.
차후 살펴보겠습니다.

질문 좀 더 드려도 될까요?;

우선 발생될 문제들을 차치하고..
다시 단순히 시도해 보았습니다.

세션 명과 세션 폴더를 지정하였습니다.
@session_name('test); 
그러니 더이상 새로운 각각의 세션이 생성되지는 않는데요..

서로의 사이트로 가면(GNU1->GNU2 or GNU2->GNU1) 로그인이 풀립니다.
이유가 뭘까요...

특이사항은 다음 함수를 부르는 부분을 주석 처리 해버렸습니다.;;




function chrome_domain_session_name(){
    // 크롬90버전대부터 아래 도메인을 포함된 주소로 접속시 특정조건에서 세션이 생성 안되는 문제가 있을수 있다.
    $domain_array=array(
    '.cafe24.com',  // 카페24호스팅
    '.dothome.co.kr',     // 닷홈호스팅
    '.phps.kr',     // 스쿨호스팅
    '.maru.net',    // 마루호스팅
    );

    $add_str = '';
    $document_root_path = str_replace('\\', '/', realpath($_SERVER['DOCUMENT_ROOT']));
    
    if( G5_PATH !== $document_root_path ){
        $add_str = substr_count(G5_PATH, '/').basename(dirname(__FILE__));
    }

    if($add_str || (isset($_SERVER['HTTP_HOST']) && preg_match('/('.implode('|', $domain_array).')/i', $_SERVER['HTTP_HOST'])) ){  // 위의 도메인주소를 포함한 url접속시 기본세션이름을 변경한다.
        if(! defined('G5_SESSION_NAME')) define('G5_SESSION_NAME', 'G5'.$add_str.'PHPSESSID');
        @session_name(G5_SESSION_NAME);
    }
}

//chrome_domain_session_name();

테스트로 혼선이 생길 여지가 있어


// @session_name('test);

이 코드는 그누보드 소스가 포함되지 않은 온전히 순수 독자적인 php 소스에서 테스트 해보시면 좋을것 같고

다시,
이부분은 주석을 풀고

chrome_domain_session_name();


chrome_domain_session_name 함수 안의 이부분을 주석처리 해야 할것 같습니다.

// $add_str = substr_count(G5_PATH, '/').basename(dirname(__FILE__));


아울러
data/dbconfig.php 의 G5_TOKEN_ENCRYPTION_KEY 값도 양쪽 동일하게 맞춰주시고

define('G5_TOKEN_ENCRYPTION_KEY', '................................'); // 동일하게 맞추기


SameSite=None 에 대해서는 다음 링크들을 확인해보세요.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hl=ko
도메인이 다를 경우 서로의 쿠키를 접근하겠다는 정책이므로
현재 겪고 계신 이슈와는 조금 무관한것 같습니다.

커스텀 된 것이라 아니라 크롬80버전 이슈가 생긴 이후부터는

 

/ 폴더에 설치하면 쿠키키가 PHPSESSID 으로 생성됩니다.

/gnu1 폴더에 설치하면 쿠키키가 G5GNU1PHPSESSID 으로 생성됩니다.

/gnu2 폴더에 설치하면 쿠키키가 G5GNU2PHPSESSID 으로 생성됩니다.

 

/aabbc 폴더에 설치하면 쿠키키가 G5AABBCPHPSESSID 으로 생성됩니다.

 

질문1.

쿠키값을 확인해 보면 로그인 후 'PHPSESSID'로 세션이 생성이 되는데...

'G5GNU1PHPSESSID'로 세션이 하나 더 생성되는데 둘은 무슨 차이 인가요?

 

질문1의 답변:

설치를 따로 했으니 두 값이 틀린겁니다. 두 값이 같으면 한 도메인에서 세션공유가 되는 문제가 생깁니다.

 

질문2.

'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'로 하는건가요?

 

질문2의 답변:

 

질문3.

그럼 'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'를 일치시켜야 하는건가요?

 

질문3의 답변:

 

 

설치를 각각 폴더에 했는데 그것을 공유를 하려면 다 고쳐야 합니다.

설치를 따로 하지 마시고, 하나만 설치하여 링크를 걸거나 include 또는 require 해서 사용하세요.

 

GNU1, GNU2 사이트가 각각 필요한 상황인데요.
설치를 따로 하지 말라는 방법을 제시해주셨는데... 이해가 잘 되지 않습니다.
링크를 걸거나 include 또는 require 하라는 말씀이 무슨 뜻일까요?

멀티사이트를 구현하는 저의 방법의 최선은 www.gnu.com 도메인을 사용하는 호스팅에 GNU1폴더와 GNU2폴더를 만들어 설치였거든요...
다른 방식이 있는 건가요?

무식하고 단순하게....
 방법1. 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'를 생성되지 않도록 하고  'PHPSESSID'만 생성하여 통일하거나....
 방법2.'G5GNU1PHPSESSID'혹은 'G5GNU2PHPSESSID'를 일치시키는게 손이 많이 갈까요?
문제 되는 부분이 뭐가 있을까요? 말씀하신대로 고칠부분이 많아질까요?

원하는게 바로 한도메인에서 세션이 공유되길 바라는 거라서요...

링크는 심볼릭 링크를 말합니다.

https://qjadud22.tistory.com/22

include 와 require 도 링크의 개념에 가깝습니다.

한도메인에서 세션이 공유되게 하려면 각각 폴더에 설치하지 말고,
하나만 설치해서 거기에서 리소스를 끌고 와야 합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 180
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT