> php教程 > PHP开发 > PHP에서 하위 도메인 전체에 세션을 구현하는 세 가지 방법

PHP에서 하위 도메인 전체에 세션을 구현하는 세 가지 방법

高洛峰
풀어 주다: 2016-12-24 09:09:20
원래의
1202명이 탐색했습니다.

예전에는 작업을 할 때 세션을 데이터베이스에 직접 저장하는 경우가 많았기 때문에 단순히 서브도메인만이 아닌 크로스도메인의 문제도 해결할 수 있었습니다. 그런데 오늘 제가 겪은 문제는 이렇게 해야 한다는 것이었습니다. 다른 사람의 기존 항목을 수정합니다. 단순한 하위 도메인이었기 때문에 간단한 해결책이 있을 것이라고 생각했습니다. 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를 저장하고 쿠키를 상위 도메인으로 설정할 수 있습니다.


예를 들어 a.sso.com을 방문하면 session_id가 쿠키에 저장됩니다. b.sso.com에 접속하면 쿠키


에서 session_id를 가져오고 session_id를 통해 지속성 컨테이너에서 세션을 가져옵니다.


예를 들어 a.sso.com을 방문하면 session_id가 쿠키에 저장됩니다. b.sso.com에 접속하면


쿠키에서 session_id를 가져오고 session_id를 통해 지속성 컨테이너에서 세션을 가져옵니다.


이번 실험에서는 실험언어로 PHP를 사용했습니다.


a.sso.com 방문 시




을 통해 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에 따라 데이터베이스에서 직렬화된 세션을 가져옵니다.

그러면 세션을 운영하여 하위 도메인 간 세션을 실현할 수 있습니다.


세션을 데이터베이스에 저장하는 것은 시간이 많이 걸리는 작업이므로 해당 세션에 대한 액세스는 memcached 또는 redis와 같은 캐시에서 수행할 수 있습니다.


이런 식으로 , 세션에 대한 액세스가 더 빠릅니다.


캐시를 사용하는 또 다른 장점은 일반적으로 세션에 일정한 생존 시간이 있다는 것입니다. 데이터베이스에 존재하는 경우 세션을 꺼낼 때 세션의 생존 시간을 저장해야 합니다. 만료되었는지 판단해야 합니다.


캐시를 이용하여 세션을 저장하면 저장 중 생존 시간을 설정할 수 있어 검색 후 무효 판단 과정이 줄어듭니다.


제가 해결한 방법은 입구에 다음 코드를 추가하는 것입니다.


사이트 2
ini_set('session.cookie_path', '/');
 
 ini_set('session.cookie_domain', '.jb51.net'); //注意jb51.net换成你自己的域名
 
ini_set('session.cookie_lifetime', '1800');
로그인 후 복사

PHP에서 하위 도메인 전체에 세션을 구현하는 세 가지 방법

두 사이트의 PHPSESSID가 동일한 것을 확인할 수 있으며, 이는 물론 하위 도메인 이름 간 문제도 해결합니다.

위의 구현 방법은 다음과 같습니다. PHP 세션의 하위 도메인 간 여러 솔루션이 도움이 필요한 모든 사람에게 도움이 되기를 바랍니다.

PHP에서 세션 교차 하위 도메인의 세 가지 구현 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿