>  기사  >  백엔드 개발  >  Yii2에서 도메인 이름 간 세션 공존 문제를 해결하는 방법

Yii2에서 도메인 이름 간 세션 공존 문제를 해결하는 방법

不言
不言원래의
2018-06-15 10:26:481790검색

이 글은 주로 Yii2에서 세션 간 도메인 공존을 위한 솔루션을 소개합니다. 내용이 꽤 좋아서 지금 공유하고 참고하겠습니다.

앞서 세션 관련 구성에 대해 이야기했습니다. 개발 중에 도메인 간에 세션을 공유하려면 로그인 모듈이 필요한 경우가 많습니다. 로그인하는 데는 한 곳만 필요하며 관련 웹사이트도 마찬가지입니다. 로그인했습니다. 상태입니다. 두 가지 상황이 있습니다. 하나는 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의 프로그램 파일이 도메인 전체에 걸쳐 액세스 가능해야 합니다. 기본적으로 브라우저는 도메인 전체에 걸쳐 쿠키를 설정할 수 없습니다. 해당 PHP 파일에 추가: 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에서 이 문제를 해결하기 위해 인터넷에 있는 튜토리얼에 따르면 최종적으로 성공한 구성은 다음과 같습니다. 사용자 및 세션:

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

여기서 구성 항목의 사용자 및 세션에 도메인을 작성했습니다(예: 'domain'=>'.baidu.com'). 따라서 판단할 필요가 없습니다. .

위 내용은 이 글의 내용입니다. 모든 내용은, 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

Yii 프레임워크에서 jquery를 사용하는 관련 문제


위 내용은 Yii2에서 도메인 이름 간 세션 공존 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.