티스토리 뷰

출처 xinfra님의 블로그 | 슈

원문 http://blog.naver.com/xinfra/80007959697


다른 도메인간(www.url.com, shop.url.com등) 세션공유


www.domain.com 

chat.domain.com 

shop.domain.com 

mail.domain.com 등등 

뒷부분은 같고 호스트 부분이 틀릴때 세션을 공유하는 방법입니다. 


일단, 쿠키와 세션에 대한 기본적인 이해부터 하겠습니다. 원리는 간단하니까요.. 


일단, 서버의 도메인이 www.domain.com 이라고 가정을 하겠습니다. 



1. 먼저 쿠키.. 


www.domain.com 에서 쿠키를 발행할수 있는 최대범위는 .domain.com 입니다 

그니까 다음처럼 하면 


setCookie("logid","gagamel", 0, "/", ".domain.com"); 

setCookie("passwd","gozila", 0, "/", ".domain.com"); 


뒤부분이 .domain.com 으로 끌나는 서버(예를들면 shop.domain.com)에서는 www.domain.com 에서 발행한 쿠키를 쓸 수 있게 되죠. 


echo $logid; <-- 요렇게요.... 


하지만 쿠키는 중요정보가 모두 클라이언트쪽으로 보내진다는데서 보안상 무척 좋지 않습니다. 

그래서들 요즘에는 세션를 쓰죠...^^ 



2. 세션이란? 


세션은 쿠키의 단점을 보완하고자 만들어졌습니다. 

위의 예를 들자면 


$logid = "gagamel"; 

$passwd = "gozila"; 

session_register("logid"); 

session_register("passwd"); 


요렇게 쓰겠죠..... 

이렇때 실제로 세션은 어떻게 동작을 하는가.?? 


실제로 위의 logid 갈은 변수들의 값은 서버에 기록이 됩니다. 

보통 설정에 파일로 기록이 되게 되어 있죠. 

위치는?? 

물론 설정에 /tmp 밑에 저장이 되게 되어 있습니다. 

그럼 파일이름은?? 

그건 php 가 그때그때 랜덤하게 유니크한 값을 만들어서 파일이름으로 씁니다.. 

sess_50fffa7e58f63c83ac0473fb928f17ed <-- 머 요딴거 

그리구 나서 이 파일이름을 클라이언트에게 쿠키로서 보내주게 되어있죠.. 



그럼 php 가 아래같은 문장을 만나게 되면 


echo $logid; 


일단 쿠키로 발행한 그 파일이름은 이미 헤더정보로 클라이언트에게서 읽어온 상태입니다. 

그리고 설정에서 정한 위치에 똑같은 파일이름이 있나 확인하구 있으면 거기에 있는 변수값을 읽어오는거죠... 

물론 파일이 없으면 누가 세션스푸핑을 한다거나 세션 만료시간으로 인해 파일이 없어졌다거나 한거겠죠.. 


쉽죠..^^ 세션은 쿠키를 보안한거지 전혀 새로운 개념은 아닙니다... 



3. 자, 그럼 세션공유를 해 봅시다... 


php.ini 에 보면 세션의 기본 설정은 

- session.save_handler      = files   ; 저장방식은 파일로 (db도 가능) 

- session.save_path         = /tmp    ; 위치는 /tmp 

- session.name              = PHPSESSID  ; 쿠키로 발행될 쿠키변수 이름 

- session.cookie_path       = /       ; 쿠키가 유효한 디렉토리 

- session.cookie_domain     =         ; 쿠키가 유효한 도메인인데 기본은 비어있습니다 

- 다른건 생략 


요렇게 되어 있습니다. 그래서 디폴트 상태로 세션을 쓰게 되면 쿠키로 발행된 세션의 파일이름은 현재의 도메인에만 먹게 되어 있죠.. 


여기서 두가지만 바꾸어 주게되면 .domain.com 으로 끝나는 모든 서버에 세션이 먹게 됩니다.. 


session.save_path         = /tmp    ; 

session.cookie_domain     = .domain.com ; 


일단 두번째 처럼 해주면 쿠키로 발행된 PHPSESSID 는 .domain.com 의 모든 서버에서 먹게 됩니다... 


첫번째는 실제 파일이 저장되어 있는 위치라고 말씀드렸죠.. 

만약 같은 서번데 도메인만 틀릴경우에는 변경할 필요없습니다. 

그러나 서버가 틀리다면 문제가 있습니다. 

이렇땐 nfs 등의 디렉토리 공유 방법을 써서 그쪽 디렉토리 이름으로 지정을 해 주셔야 합니다. 

디렉토리 소유권은 nobody 로 해주고 권한은 700 정도로 해주면 됩니다. 

이렇게 하면 세션은 공유가 되죠....^^ 


아님 nfs 등을 쓰기가 꺼림직하면 세션을 아예 db로 저장을 해서 공유하는 방법이 있습니다.. 

이건 세션핸들러 등으로 검색하면 잘 설명되어 있습니다. 그걸 참조하세요. 



여기까지가 제가 함 해봐서 성공한겁니다... 


그럼 좋은 하루 되세요....^____^ 

끝까지 읽어주셔서 감사하구요, 

전. "linux-php 에서 mssql 억세스 완결판...일려나" 를 쓴 바로 그 넘입니다. 

저작자 표시
신고
댓글
댓글쓰기 폼