PHP セッションのクロスドメインの見通しと開発傾向
インターネットの活発な発展に伴い、Web サイトはもはや機能しなくなることがよくあります。単一のドメイン名のページに限定されますが、複数のドメイン名またはサブドメインを通じて提供されます。この場合、ユーザーのログイン ステータスやその他のデータを共有する必要がある場合は、ドメイン間でセッションを渡す問題を考慮する必要があります。この記事では、PHP セッション クロスドメインの展望と開発動向を紹介し、具体的なコード例を示します。
従来の PHP アプリケーションでは、セッション データはサーバー側に保存されます。ユーザーがページをリクエストすると、サーバーはリクエストに含まれるセッション ID に基づいてサーバー側で対応するセッション データを検索し、メモリにロードします。これにより、ユーザーのログイン ステータスやその他の関連データを簡単に共有できるようになります。
ただし、Web サイト間でドメイン名またはサブドメイン名が異なるため、ドメインを越えてセッション データを転送することが困難になります。この問題を解決する一般的な方法は、クロスドメイン Cookie を設定するか、サードパーティのストレージ (Redis など) を使用して、クロスドメイン セッション データを共有することです。
PHP では、session.cookie_domain
構成項目を変更することで、クロスドメイン Cookie を設定できます。具体的な例は次のとおりです。
// 设置跨域 Cookie // 假设 a.example.com 和 b.example.com 是两个不同的网站,需要共享 Session 数据 ini_set('session.cookie_domain', '.example.com'); session_start();
上記のコードでは、session.cookie_domain
を .example.com## に設定することで、a.example.com と b.example が実装されています。 # .com間でセッションデータを共有する目的。
// 使用 Redis 存储 Session ini_set('session.save_handler', 'redis'); ini_set('session.save_path', 'tcp://127.0.0.1:6379'); session_start();
session.save_handler および
session.save_path 構成項目を変更することで、セッション保存方法を Redis に切り替えます。
// 使用 JWT 实现跨域 Session 传递 require_once 'vendor/autoload.php'; use FirebaseJWTJWT; $key = 'secret_key'; $payload = array( 'user_id' => 123, 'username' => 'example' ); $jwt = JWT::encode($payload, $key); setcookie('token', $jwt, time() + (3600 * 24), '/', '.example.com', false, true);
以上がPHPセッションクロスドメインの展望と開発動向の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。