앞서 세션 관련 구성에 대해 이야기했습니다. 도메인 간에 세션을 공유하려면 로그인 모듈이 필요한 경우가 많습니다. 로그인하는 데는 한 곳만 필요하며 관련 웹사이트는 다음과 같습니다. 로그인 상태에서도 마찬가지입니다. 두 가지 상황이 있습니다. 하나는 9streets.cn과 a.9streets.cn 사이이고 다른 하나는 a.com과 b.com 사이입니다. 지난 며칠 동안 처리 방법을 요약했습니다.
1차 및 2차 도메인 이름이든, 다른 도메인 이름의 교차 도메인이든, 두 가지 사항을 충족해야 합니다.
클라이언트는 동일한 세션 ID에 액세스합니다.
모든 도메인 이름에 해당하는 서버에서 접근하는 세션 데이터의 위치는 동일해야 합니다.
1. 공통 세션 ID에 액세스하는 방법은 주로 현재 세션 ID를 쿠키에 기록하는 것입니다.
쿠키는 다른 도메인 이름으로 액세스할 수 없습니다. 로그인 시 로그인 정보를 공유해야 하는 도메인 이름을 설정하세요. 1차 또는 2차 도메인 이름 아래인 경우에는 쿠키를 기본 도메인 이름으로 직접 설정하세요. 예:
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
다음과 같이 질문하실 수도 있습니다. 다른 도메인 이름에 있으면 어떻게 되나요? 이는 P3P 기술을 사용하는 간단한 솔루션입니다. 구현 원리는 x.com 웹사이트에 액세스할 때 y.com 프로그램이 y.com 파일을 트리거하여 sessionid 값을 쓰고, sessionid 값을 얻을 수 있다는 것입니다. 값은 데이터베이스에 저장되며 동일한 sessionid 값이면 충분합니다. 이를 위해서는 y.com의 프로그램 파일이 도메인 전체에 걸쳐 액세스 가능해야 합니다. 기본적으로 브라우저는 도메인 전체에 걸쳐 쿠키를 설정할 수 없습니다. 추가: header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
2.세션 데이터 저장 위치 일관된 구현 방법
세션 데이터는 기본적으로 서버의 tmp 파일에 저장되는데, 서버 메모리에 저장되지 않고 파일 형태로 존재하는데 여기서는 모든 도메인에서 접근 가능하도록 수정해야 합니다. 데이터베이스 저장, 파일 저장, 메모리 저장 등을 온라인으로 도입하여 세션 데이터를 저장하기 위해 데이터베이스를 사용하고 웹 사이트의 방문 횟수가 많은 경우 SESSION의 읽기 및 쓰기 작업이 데이터베이스에서 자주 수행되므로 효율성이 높아집니다. 메모리의 존재를 고려할 수 있습니다. 다음 session.rar에서는 데이터 인벤토리 세션의 예를 소개합니다.
yii2에서 이 문제를 해결하기 위해 인터넷에서 찾은 튜토리얼에 따른 성공적인 구성은 다음과 같습니다.
프런트엔드의 config 폴더에 있는 main.php에서 구성
$host = explode('.', $_SERVER["HTTP_HOST"]); if (count($host) > 2) { define('DOMAIN', $host[1] . '.' . $host[2]); } else { define('DOMAIN', $host[0] . '.' . $host[1]); } define('DOMAIN_HOME', 'www.' . DOMAIN); define('DOMAIN_USER_CENTER', 'man.' . DOMAIN); define('DOMAIN_API', 'api.' . DOMAIN); define('DOMAIN_EMAIL', 'mail.' . DOMAIN); define('DOMAIN_LOGIN', 'login.' . DOMAIN); define('DOMAIN_IMG', 'img.' . DOMAIN);
그런 다음 사용자 및 세션을 구성합니다:
'user' => [ 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN], ], 'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],
여기서 구성 항목의 사용자 및 세션에 도메인을 썼습니다. 예: ' domain'= >'.baidu.com'이므로 판단할 필요는 없습니다.
위 내용은 모두의 학습에 도움이 되기를 바랍니다. 또한 모든 사람들이 PHP 중국어 웹사이트를 지지해주기를 바랍니다.
Yii2의 세션 간 도메인 공존 솔루션과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!