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
작동합니다. 하지만 브라우저의 모든 캐시와 쿠키가 작동하는지 확인하려면 반드시 삭제해야합니다.
- 브라우저의 모든 캐시와 쿠키를 파괴합니다.
당신에
xxx.example.com
와yyy.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
'developer tip' 카테고리의 다른 글
OS X El Capitan의 "제한된"폴더 / 파일 (0) | 2020.11.05 |
---|---|
인덱스 속성을 MOQ하는 방법 (0) | 2020.11.05 |
Web Api에 간단한 게시 (0) | 2020.11.05 |
GoLang에서 문자열을 어떻게 비교합니까? (0) | 2020.11.05 |
매개 변수를 사용하거나 사용하지 않고 사용할 수있는 Python 데코레이터를 만드는 방법은 무엇입니까? (0) | 2020.11.05 |