웹 사이트 및 애플리케이션 개발에서 크로스 도메인 요청은 일반적인 시나리오이지만 브라우저의 동일한 오리핀 정책으로 인해 Cross-Domain 동안 PHP 세션을 정상적으로 공유 할 수 없어서 로그인 상태 고장과 같은 문제가 발생합니다. 이 기사는 JWT (JSON Web Token) 기술을 결합하여 오픈 소스 도구 easysession을 기반으로 한 솔루션을 소개하여 도메인 교차 도메인 환경에서 세션 관리를 실현합니다.
Cross-Domain은 한 도메인 이름의 웹 페이지의 다른 도메인 이름에 액세스하는 리소스를 나타냅니다. 브라우저 제한으로 인해 쿠키 및 세션 정보는 도메인에 걸쳐 전달 될 수 없으므로 PHP 세션은 다른 도메인 이름에서 공유 할 수 없어 사용자 경험과 응용 프로그램의 정상적인 작동에 영향을 미칩니다.
EasySession은 PHP 세션 관리를 위해 설계된 오픈 소스 라이브러리로 JWT 기술을 활용하여 크로스 도메인 세션 관리를 달성합니다. JWT는 가볍고 무국적자 인증 솔루션으로, 도메인 간 환경에서 사용자 세션 정보를 안전하게 전송할 수 있습니다.
composer require zaherg/easy-session
use Zaherg\EasySession\SessionHandler;
$sessionHandler = new SessionHandler();
$sessionHandler->startSession();
header("Access-Control-Allow-Origin: http://example.com");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type");
사용자 로그인 확인이 성공한 후 서버는 JWT를 생성하여 프론트 엔드로 반환합니다. 프론트 엔드는 프론트 엔드가 요청할 때마다 요청 헤더에 인증 필드를 추가합니다. 서버는 JWT를 구문 분석하여 해당 세션 정보를 얻습니다.
// 서버 생성 JWT
use Firebase\JWT\JWT;
$key = "your_secret_key";
$payload = array(
"user_id" => $user_id,
// 더 많은 사용자 정의 데이터를 추가 할 수 있습니다
);
$jwt = JWT::encode($payload, $key);
// 프론트 엔드를 요청할 때 요청 헤더를 추가하십시오:Authorization: Bearer {JWT}
// 서버 측 분석 JWT
$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$decoded = JWT::decode($jwt, $key, array('HS256'));
$user_id = $decoded->user_id;
세션 보안을 보장하려면 JWT를 생성 할 때 만료 날짜를 설정하고 HS256과 같은 안전한 키 및 서명 알고리즘을 사용하는 것이 좋습니다. 이것은 JWT가 변조 및 학대를 효과적으로 방지 할 수 있습니다.
PHP 개발자는 EasySession과 JWT 기술을 결합하여 세션 크로스 도메인 문제를 효과적으로 해결하고 크로스 도메인 응용 프로그램의 사용자 경험과 보안을 향상시킬 수 있습니다. 이 기사에 제공된 코드 예제 및 단계는 다양한 PHP 교차 도메인 시나리오에 적합한 크로스 도메인 세션 관리를 신속하게 구현하는 데 도움이 될 수 있습니다.