PHP 세션이 하위 도메인으로 전달되도록 허용
모든 사용자 데이터에 대해 PHP 세션(세션 ID 쿠키 제외)을 사용하고 사용자가 프로파일로 이동할 때user.mydomain.example서브도메인을 삭제할 때까지 즉시 "삭제"됩니다.
모든 도메인으로부터의 세션을 받아들일 수 있는 방법은 있습니까?*.mydomain.example
여기 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.example');
보안은 저주받을 거야, 나만큼 불완전하거나 잘못된 대답에 좌절한다면, 이 사람은 너의 구원자다.효과가 있어요.
핵심 기능 파일의 맨 위에 있는 세션 이름을 다음과 같이 변경합니다.
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.ini 파일을 추가해야 했습니다(이 파일은 php 코드를 실행하고 세션이 필요합니다).
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
이게 도움이 됐으면 좋겠어요(이걸 알아내는 데 몇 년이 걸렸어요.
나에게 효과가 있었던 또 다른 옵션은 세션 이름을 강제로 세션 이름을 지정하는 것입니다.
session_name("myWebsite");
session_start();
네.ini_set동작하고 있습니다만, 동작하는 것을 확인하려면 , 브라우저의 캐시와 쿠키를 모두 파기해 주세요.
- 브라우저의 모든 캐시 및 쿠키 삭제
당신의 안에서
xxx.example.com그리고.yyy.example.comphp 파일은 다음과 같이 시작합니다.ini_set('session.cookie_domain', '.example.com' ); session_start();
방금 이 문제가 있었는데 알고 보니 두 개의 다른 서브 도메인에 대해 다른 php.ini 파일을 사용하고 있었습니다.이러한 ini 파일은 다른 session.save_path 변수를 지정했습니다.분명한 이유로 세션을 공유할 필요가 있는 모든 서브도메인에서 동일하게 해야 합니다.
전에session_start()사용하다session_set_cookie_params()교환.domain.example다음 예시와 같이 도메인을 지정합니다.
session_set_cookie_params(0, '/', '.domain.example');
session_start();
시험:
session_start();
$sessionId = session_id();
사용자가 기록되었습니다.사용자가 다른 서브도메인으로 전환할 때 다음과 같은 URL로 세션 ID를 전송했습니다.user.mydomain.example/?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.example');
이것은 좋은 해결책이지만 모든 상황에서 사용할 수는 없습니다.예를 들어 Not-Session cookie에 의존할 수 없는 경우에는 작동하지 않습니다.
올바르게 사용한다면 이 방법은 실제로 작동해야 합니다.
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
'source' 카테고리의 다른 글
| 디자인 패턴 웹 기반 응용 프로그램 (0) | 2022.10.18 |
|---|---|
| "java.lang"을 다루는 방법Out Of Memory Error: Java 힙 공간" 오류입니까? (0) | 2022.10.18 |
| PHP에서 루프를 종료할 수 있습니까? (0) | 2022.10.18 |
| MariaDB/MySQL에서 전체 텍스트 검색을 위해 문자열을 이스케이프하는 방법 (0) | 2022.10.18 |
| 함수 호출의 타임아웃 (0) | 2022.10.18 |