developer tip

PHP 세션이 하위 도메인으로 전달되도록 허용

optionbox 2020. 11. 5. 07:56
반응형

PHP 세션이 하위 도메인으로 전달되도록 허용


모든 사용자 데이터에 대해 PHP 세션 (쿠키가 아닌 세션 ID 쿠키 제외)을 사용하며 사용자가 프로필 user.mydomain.com으로 이동하면 하위 도메인을 제거 할 때까지 즉시 "로그 아웃"됩니다.

* .mydomain.com이면 모든 도메인의 세션을 수락하는 방법이 있습니까?


다음은 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

        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');

당신이 저처럼 불완전하거나 잘못된 대답에 좌절한다면 이것이 당신의 구세주입니다. 그냥 작동합니다.


핵심 기능 파일 상단에서 세션 이름을 다음과 같이 변경하십시오.

 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,"/" );

그런 다음 브라우저의 기존 쿠키를 확인하고 도메인 및 하위 도메인의 모든 쿠키를 제거하고 프로세스를 반복하십시오.


나는 이것이 꽤 오래되었다는 것을 알고 있지만 @CTT의 제안을 더 확장하려면 다음 텍스트로 내 하위 도메인의 각 하위 디렉토리 (php 코드를 실행하고 세션이 필요함)에 php.ini 파일을 추가해야했습니다.

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

나는 이것이 도움이되기를 바랍니다 (이것을 알아내는 데 시간이 걸렸습니다).


나를 위해 일한 또 다른 옵션은 세션 이름을 강제하는 것입니다.

session_name("myWebsite");
session_start(); 

예. ini_set작동합니다. 하지만 브라우저의 모든 캐시와 쿠키가 작동하는지 확인하려면 반드시 삭제해야합니다.

  1. 브라우저의 모든 캐시와 쿠키를 파괴합니다.
  2. 당신에 xxx.example.comyyy.example.com, 당신의 PHP 파일은 다음과 같이 시작해야합니다.

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

나는 방금이 문제가 있었고 두 개의 다른 하위 도메인에 대해 다른 php.ini 파일을 사용하고 있음이 밝혀졌습니다. 이 ini 파일은 다른 session.save_path 변수를 지정했습니다 . 명백한 이유로 세션을 공유해야하는 모든 하위 도메인에 대해 동일해야합니다.


이 시도:

session_start(); 

$sessionId =  session_id();

사용자를 기록했습니다. 사용자가 다른 하위 도메인으로 전환하면 다음과 같은 URL에 세션 ID가 전송되었습니다.user.mydomain.com/?id=$sessionId

$sessionId =  $_GET['id'];

session_start($sessionId); 

이제 사용자는 모든 세션 값을 얻고 로그인 상태를 유지합니다.


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');

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

올바르게 사용하면 실제로 작동해야합니다.

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

예를 들어, 당신은 그것을 session_start()호출하는 모든 파일 앞에 넣어야합니다.session_start()

참고URL : https://stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains

반응형