그누보드 2개 설치 후 로그인 연동 작업중인데요..
세션 질문이 있어서요.
쿠키값을 확인해 보면 로그인 후 'PHPSESSID'로 세션이 생성이 되는데...
'G5GNU1PHPSESSID'로 세션이 하나 더 생성되는데 둘은 무슨 차이 인가요?
멀티사이트라 같은 도메인 하위 폴더의 또 다른 그누2사이트에 로그인하면
'G5GNU2PHPSESSID'로 세션이 또 생성되구요..
실제 사이트 안에서 글쓰기 회원정보수정 등의 페이지에서 사용자를 분별하는건
'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'로 하는건가요?
그럼 'PHPSESSID' 가 아니라 'G5GNU1PHPSESSID'랑 'G5GNU2PHPSESSID'를 일치시켜야 하는건가요?
답변 3개 / 댓글 9개
https://github.com/gnuboard/gnuboard5/blob/master/common.php#L244
과거에 이부분의 로직이 남긴 쿠키가 남아있는건 아닐까요?
해당 도메인의 쿠키를 모두 삭제 후 새로 접속 해보세요.
답변에 대한 댓글 6개
다만 세션키를 일치시키는것 외에
체크시 비교하는 부분이라던지 커스텀 된 부분이라던지 등이 변수가 될수 있습니다.
우선 다른 커스텀부분은 제외하고
체크시 비교하는 부분만 먼저 확인해본다면
각 설치마다 랜덤하게 할당되어
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) 로그인이 풀립니다.
이유가 뭘까요...
특이사항은 다음 함수를 부르는 부분을 주석 처리 해버렸습니다.;;
[code]
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();
[/code]
[code]
// @session_name('test);
[/code]
이 코드는 그누보드 소스가 포함되지 않은 온전히 순수 독자적인 php 소스에서 테스트 해보시면 좋을것 같고
다시,
이부분은 주석을 풀고
[code]
chrome_domain_session_name();
[/code]
chrome_domain_session_name 함수 안의 이부분을 주석처리 해야 할것 같습니다.
[code]
// $add_str = substr_count(G5_PATH, '/').basename(dirname(__FILE__));
[/code]
아울러
data/dbconfig.php 의 G5_TOKEN_ENCRYPTION_KEY 값도 양쪽 동일하게 맞춰주시고
[code]
define('G5_TOKEN_ENCRYPTION_KEY', '................................'); // 동일하게 맞추기
[/code]
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 해서 사용하세요.
답변에 대한 댓글 3개
답변을 작성하려면 로그인이 필요합니다.

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