예전에는 작업을 할 때 세션을 데이터베이스에 직접 저장하는 경우가 많았기 때문에 단순히 서브도메인만이 아닌 크로스도메인의 문제도 해결할 수 있었습니다. 그런데 오늘 제가 겪은 문제는 이렇게 해야 한다는 것이었습니다. 다른 사람의 기존 항목을 수정합니다. 단순한 하위 도메인이었기 때문에 간단한 해결책이 있을 것이라고 생각했습니다. Du Niang은 세 가지 해결책을 찾았습니다.
세션은 주로 두 부분으로 나뉩니다.
하나는 세션 데이터입니다. 이 데이터는 기본적으로 서버의 tmp 파일에 저장되며, 파일 형태로 존재합니다.
다른 하나는 세션 데이터를 표시하는 세션 ID입니다. 세션 ID는 세션 파일의 파일 이름이므로 세션 ID는 무작위로 생성되므로 고유성과 무작위성을 보장할 수 있습니다. 세션의 보안. 일반적으로 세션의 수명이 설정되지 않은 경우 세션 ID는 메모리에 저장되며, 브라우저를 닫은 후 해당 ID는 자동으로 로그아웃되며 해당 페이지를 다시 요청하면 새 세션 ID가 등록됩니다. 클라이언트가 쿠키를 비활성화하지 않으면 쿠키는 세션 세션을 시작할 때 세션 ID와 세션 수명을 저장하는 역할을 합니다.
두 개의 다른 도메인 이름 웹사이트가 동일한 세션을 사용하려고 하며, 이로 인해 세션 간 도메인 문제가 발생합니다!
기본적으로 각 서버는 동일한 클라이언트에 대해 SESSIONID를 생성합니다. 예를 들어 동일한 사용자 브라우저의 경우 서버 A에서 생성된 SESSION ID는 11111111111이고 서버 B에서 생성된 SESSION ID는 11111111111입니다. 222222입니다. 또한, PHP의 SESSION 데이터는 본 서버의 파일 시스템에 별도로 저장됩니다. SESSION 데이터를 공유하려면 두 가지 목표를 달성해야 합니다.
하나는 동일한 클라이언트에 대해 각 서버에서 생성되는 SESSION ID가 동일해야 하며 동일한 COOKIE를 통해 전달될 수 있다는 것입니다. 즉, 각 서버는 PHPSESSID라는 동일한 쿠키를 읽을 수 있어야 합니다.
다른 하나는 SESSION 데이터의 저장 방법/위치가 각 서버에서 액세스할 수 있도록 보장해야 한다는 것입니다. 간단히 말해서 이 두 가지 목표는 여러 서버(A 및 B 서버)가 클라이언트의 SESSION ID를 공유하고 서버의 SESSION 데이터도 공유해야 한다는 것입니다.
2. php.ini에서
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.mydomain.com'); ini_set('session.cookie_lifetime', '1800');
을 설정
3. PHP 페이지 맨 처음에
session.cookie_path = / session.cookie_domain = .mydomain.com session.cookie_lifetime = 1800
함수를 호출합니다(조건은 1과 동일)
session은 세션의 유일한 식별자로 Session_id를 가집니다. .
session_set_cookie_params(1800 , '/', '.mydomain.com');
Session 하위 도메인을 구현하기 위해 실제로 동일한 브라우저에서 두 개의 A 및 B 하위 도메인에 액세스하면 해당 세션이 동일합니다.
세션이 서버측에 저장되는데, 두 서버는 이 두 요청이 하나의 브라우저에서 발행되었음을 어떻게 식별할 수 있습니까?
을 통해 session_id가 쿠키에 저장됩니다. 가운데.
session_start(); $_SESSION['person'] = "SBSBSBS"; $session_id = session_id(); setcookie('name',$session_id,time()+3600*24,'/','SSO.com');
PHP에서는 세션이 배열이므로 PHP에는 배열을 직렬화하는 serialize() 함수가 있습니다.
그런 다음 저장합니다. 데이터베이스의 $session_value.
$session_value = serialize($_SESSION);
b.sso.com을 방문하면 쿠키에서 session_id를 가져온 다음, session_id에 따라 데이터베이스에서 직렬화된 세션을 가져옵니다.
그러면 세션을 운영하여 하위 도메인 간 세션을 실현할 수 있습니다.
제가 해결한 방법은 입구에 다음 코드를 추가하는 것입니다.
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.jb51.net'); //注意jb51.net换成你自己的域名 ini_set('session.cookie_lifetime', '1800');
두 사이트의 PHPSESSID가 동일한 것을 확인할 수 있으며, 이는 물론 하위 도메인 이름 간 문제도 해결합니다.
위의 구현 방법은 다음과 같습니다. PHP 세션의 하위 도메인 간 여러 솔루션이 도움이 필요한 모든 사람에게 도움이 되기를 바랍니다.
PHP에서 세션 교차 하위 도메인의 세 가지 구현 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!