2009-03-13 4 views
59

모든 사용자 데이터에 대해 php 세션 (쿠키가 아니라 세션 아이디 쿠키 제외)을 사용하고 사용자가 자신의 프로필 user.mydomain.com으로 이동하면 즉시 "로그 아웃"됩니다. 하위 도메인을 제거 할 때까지php 세션이 하위 도메인으로 이월되도록 허용

한 그 * .mydomain.com을

+0

첫째,'위해서는 ini_set은 ('session.cookie_domain', '.example.com을')', * 다음 *'으로 session_start()'또는'세션 (시작 ::)'에서 HTTPS ://github.com/delight-im/PHP-Cookie – caw

답변

74
여기

있는 4 옵션으로 모든 도메인에서 세션을 받아 들일 수있는 방법이 있나요.

장소이 php.ini 파일에서 :

session.cookie_domain = ".example.com" 

또는 당신의 .htaccess에서 :

php_value session.cookie_domain .example.com 

또는

스크립트의 첫 번째 일이 같은 :

ini_set('session.cookie_domain', '.example.com'); 

또는 귀하의 사이트에 대한 귀하의 PHP-Fpm 풀 구성 :

php_value[session.cookie_domain] = .example.com 
+2

불행하게도 모두 3 명이 실패했습니다. 별 *이 있어야합니까? – Anthony

+2

아주 이상하게, 나는 그 방법들을 사용 해왔고 잘 작동합니다. 우연히 Suhosin이 설치되어 있습니까? 이것을 허용하기 위해 변경해야 할 설정이 있다는 것을 기억합니까? 그렇지 않다면, 설치에 대한 더 많은 정보를 게시 할 수 있습니까 (예 : apache, lighttpd, PHP 버전)? – CTT

+0

일부 패키지에는 Suhosin이 함께 제공됩니다. 'php -i | grep -i 'Suhosin''이 거기에 있는지 확인합니다. –

11
 if(isset($_COOKIE['session_id'])) 
      session_id($_COOKIE['session_id']); 
     Zend_Session::start(); //or session_start(); 
     if(!isset($_COOKIE['session_id'])) 
      setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

보안이 저조 될 수 있습니다. 내가 불완전하거나 불량한 답변으로 좌절하는 경우, 이것이 귀하의 구세주입니다. 그냥 작동합니다.

+0

이것은 나를 위해 일했지만 보안 문제를 이해하지 못합니다. 어떤 보안 문제가 있을지 설명해 주시겠습니까? – Neo

-3
if(isset($_COOKIE['session_id'])) 
    session_id($_COOKIE['session_id']); 
    Zend_Session::start(); //or session_start(); 

    if(!isset($_COOKIE['session_id'])) 
     setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

이것은 좋은 해결책이지만 모든 상황에서 사용할 수는 없습니다. 예를 들어 비 세션 쿠키에 의존 할 수 없을 때 작동하지 않습니다.

올바르게 사용하면 실제로 작동해야합니다. 하지만 더 CTT의 제안 @에 확대 - - 예를 들어

ini_set('session.cookie_domain', '.example.com'); 

당신은 내가 알고있는이 꽤 오래 session_start()

4

를 호출하는 모든 파일도 session_start() 전에 넣어 필요가 내가 PHP를 추가하는 데 필요한 각 하위 디렉토리에있는 .ini 파일 (즉 PHP 코드를 실행하고 세션이 필요합니다) 다음 텍스트로 내 하위 도메인을 :

suhosin.session.cryptdocroot=Off 
suhosin.cookie.cryptdocroot=Off 

나는이 (가 이것을 알아 내기 위해 나에게 나이를했다) 도움이되기를 바랍니다.

+0

로컬 환경에서 세션 공유가 제대로 작동하므로이 코드는 현재 2 시간 동안 디버깅되었습니다. 는 suhosin 설정을 이전에 확인 했어야합니다 – weyandch

2

나를 위해 일한 또 다른 옵션은 : 세션의 이름을 강제하는 것입니다 : 난 그냥이 문제를 가지고

session_name("myWebsite"); 
session_start(); 
0

을 그리고 내가 두 개의 서로 다른 하위 도메인에 대해 서로 다른의 php.ini 파일을 사용하고 있었다 밝혀 . 이 ini 파일은 다른 session.save_path 변수를 지정했습니다. 세션을 공유해야하는 모든 하위 도메인에서 동일한 이유가 필요합니다.

5

변화

session_name('mysession'); 

다음 마지막으로 하위 도메인의 기본 세션 이름을 변경 PHP 페이지

session_set_cookie_params(0,"/",".example.com",FALSE,FALSE); 
    setcookie(session_name(), session_id(),0,"/","example.com"); 
    session_start(); 

에 다음 코드를 사용

같은 파일 핵심 기능의 상단에있는 세션 이름 하위 도메인의 핵심 기능 파일 에있는 기본 쿠키를 제거하십시오 :

/*default session name*/ 
session_name("mysession"); 
/*remove the PHPSESSID and default session name from subdomain's cookie*/ 
setcookie("mysession", "",1,"/"); 
setcookie("PHPSESSID", "",1,"/"); 

당신이 PHPSESSID 같은 쿠키 이름을 사용하여 계속하면, 그냥, 다음 브라우저의 기존 쿠키를 확인

"mysession" string like session_name('mysession'), setcookie("mysession", "",1,"/"); 

모든 기능을 제거 단지 도메인 및 하위 도메인의 모든 쿠키를 제거하고 프로세스를 반복합니다.

+0

이것은 저에게 도움이되었습니다. 이 질문에 대한 다른 답변은 없습니다. –

2

예. ini_set이 작동 중입니다. 브라우저의 모든 캐시와 쿠키를 파괴하여 제대로 작동하는지 확인하십시오.

  1. 는 PHP 파일은 다음과 같이 시작한다 xxx.example.comyyy.example.com 귀하의 브라우저
  2. 의 모든 캐시와 쿠키를 파괴한다.

    ini_set('session.cookie_domain', '.example.com'); session_start(); 
    
관련 문제