ウェブサイトとアプリケーションの開発では、クロスドメインの要求は一般的なシナリオですが、ブラウザの同じオリジンポリシーにより、PHPセッションはクロスドメイン中に正常に共有できなくなり、ログインステータス障害などの問題が発生します。この記事では、JSON Webトークン(JWT)テクノロジーを組み合わせて、ドメインクロス環境でセッション管理を実現するオープンソースツールEasysessionに基づくソリューションを紹介します。
Cross-Domainとは、1つのドメイン名の下にあるWebページの別のドメイン名にアクセスするリソースを指します。ブラウザの制限により、Cookieとセッションの情報をドメイン全体に渡すことはできず、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が改ざんされ、虐待されるのを効果的に防止できます。
EasysessionとJWTテクノロジーを組み合わせることで、PHP開発者はセッションクロスドメインの問題を効果的に解決し、クロスドメインアプリケーションのユーザーエクスペリエンスとセキュリティを改善できます。この記事で提供されているコードの例と手順は、さまざまなPHPクロスドメインシナリオに適したクロスドメインセッション管理を迅速に実装するのに役立ちます。