웹모아 
웹모아[손님] 검색 로그인  
웹모아
 
자잘한팁
 


[RE] 다른 서버, 다른 도메인간 세션 공유 방법
  2007-04-19 14:19:36 조회:2954
글자수:1492


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로 저장을 해서 공유하는 방법이 있습니다..
이건 세션핸들러 등으로 검색하면 잘 설명되어 있습니다. 그걸 참조하세요.
출처 : Tong - chouncle님의 PHP통



 댓글 (0)


자잘한팁
페이지: 1 / 3   


     리눅스에서 하드디스크 mount 하기1332
       CentOS 하드 마운트1444
     리눅스에서 캡쳐하는 방법2563
     특정 디렉토리의 사용량을 알려면2627
     시스템이 ping에 응답하지 못하게 설정하려면2151
     리눅스에서 공백이 포함된 디렉토리 처리2449
     cp 명령과 ln 명령의 차이점5598
     리눅스 명령어 top2233
     특정 디랙토리 인증걸기 htpasswd, htacc2520
     IP 주소 접속을 도메인 주소로 바꾸기2579
     apache 에서 '사이트 공사중' 2787
     한개의 호스팅으로 여러개 홈피 운영하기2139
      리눅스 실시간 트래픽 모니터링 하기2708
     리눅스에서 날짜를 기준으로 파일삭제9227
     윈도우에서 unload 받은 오브젝트를 리눅스에서 2244
     유닉스 및 리눅스 명령어 팁2858
     리눅스 부팅후 자동 실행2411
     리눅스 소유권바꿀때 인수 명단이 너무 김..에대해서3159
     find 명령어로 특정문자가 포함된 파일 찾기(홈마스타)(1) 2831
     리눅스에서 파일 찾기(홈마스타)2444
     특정 문자열을 포함하는 특정 파일들 찾는 쉘(홈마스타)2433
     인터넷 이용시 만나는 에러메시지의 의미(홈마스타)2521
     하이퍼텍스트 전송규약 1.1표준(안)(홈마스타)4198
     웹 로그 분석 기본 개념의 이해 (70) : 웹 로(홈마스타)2638
     mod_url(홈마스타)2862
     다른 서버, 다른 도메인간 세션 공유 방법 1차 개(홈마스타)3222
    [RE] 다른 서버, 다른 도메인간 세션 공유 방법(홈마스타)2955
     다른서버 세션공유(홈마스타)2909
     이미지 링크 못하게 하기(홈마스타)2307
     아파치 가상 유저 호스트 설정하기[modr_rewr(홈마스타)1428
≪ [1]  [2]  [3]   ≫

복수단어 검색은 공백(space)로 구분해 주세요.



공지사항
[손님]

 
인기 글
[손님]
3019
3178
4158
3519
14012
3388
4810
5091
4960
4043
7609
3091
4026
4847
3182
 
최근 글
[손님]
136
263
477
280
293
178
254
3202
852
869
1040
891
4158
3452
3519