ホームページ > バックエンド開発 > PHPチュートリアル > PHP セッションのクロスドメインおよびクロスサイトのストレージ関連付け

PHP セッションのクロスドメインおよびクロスサイトのストレージ関連付け

王林
リリース: 2023-10-12 10:16:01
オリジナル
1052 人が閲覧しました

PHP Session 跨域与跨站点存储的关联

PHP セッション クロスドメインとクロスサイト ストレージの関連付けには、特定のコード例が必要です

近年、インターネットの急速な発展に伴い、クロスドメインそして、開発においてクロスサイトストレージの重要性がますます高まっています。 PHP 開発では、Session を使用してユーザー セッション データを保存するのが一般的な方法です。この記事では、PHP セッションのクロスドメインおよびクロスサイト ストレージに焦点を当て、いくつかの具体的なコード例を示します。

1. PHP セッションの概要
PHP セッションは、異なるページ間でデータを転送および保存するために使用されるテクノロジです。ユーザーが Web サイトにアクセスすると、サーバーは各ユーザーに一意のセッション ID を割り当て、このセッション ID をユーザーのブラウザに保存します。セッション ID を通じて、サーバーはさまざまなユーザーを識別し、ユーザーのセッション データをサーバー側のメモリまたはディスクに保存して、ユーザーが他のページにアクセスしたときにデータを取得できるようにします。

2. セッションのクロスドメインストレージ
実際の開発では、あるドメイン名のページ内で別のドメイン名のセッションデータを取得したり設定したりする必要があり、セッションのクロスドメインストレージが必要になります。質問。クロスドメイン ストレージを実現するには、Cookie または URL パラメーターを使用してセッション ID を渡します。

  1. Cookie を使用してセッション ID を渡す

まず、セッション データを保存するサーバー上で、セッションのドメイン属性をトップレベルに設定する必要があります。他のドメイン名で使用できるようにドメイン名を変更し、同じセッション データにアクセスします。たとえば、ドメイン 1.com とドメイン 2.com という 2 つのドメイン名でセッション データを共有する場合は、以下に示すように、セッションのドメイン属性を「.com」に設定できます。各ページのヘッダーは session_start() 関数を呼び出してセッションを開き、セッション ID を Cookie に保存します。例:

ini_set("session.cookie_domain", ".com");
ログイン後にコピー

他のドメイン名のページでは、以下の Cookie を読み取ることができます。セッション ID を取得し、そのセッション ID を使用してセッション データにアクセスします (例:

session_start();
setcookie("PHPSESSID", session_id(), time()+3600, "/", ".com");
ログイン後にコピー

) Cookie を使用してセッション ID を渡すのは比較的簡単ですが、 Cookie はブラウザに保存され、特定のセキュリティ リスクがあるため、ドメイン間でセッション ID を渡すときは適切な暗号化と検証が必要です。

URL パラメーターを使用してセッション ID を渡す
  1. Cookie を使用してセッション ID を渡したくない場合は、セッション ID を URL パラメーターとして渡すこともできます。まず、セッション データを保存するサーバーで、URL にセッション ID を追加する必要があります。例:
session_id($_COOKIE["PHPSESSID"]);
session_start();

// 读取Session数据
$data = $_SESSION["data"];
ログイン後にコピー

別のドメイン名のページでは、次のコマンドを使用して URL 内のセッション ID を取得できます。 $_GET 変数、およびセッション ID を使用してセッション データにアクセスします。例:

session_start();

// 获取Session ID
$sessionId = session_id();

// 将Session ID添加到URL中
$url = "http://domain2.com/index.php?PHPSESSID=" . $sessionId;

// 跳转到另一个域名的页面
header("Location: " . $url);
exit();
ログイン後にコピー

URL パラメーターを使用してセッション ID を渡す方法は比較的柔軟ですが、セッション ID を渡す場合、セキュリティリスクを防ぐために、URL を適切に暗号化し、検証する必要があります。

3. セッション クロスサイト ストレージ

クロスドメイン ストレージに加えて、異なるサイト間でセッション データを共有する必要がある場合もあり、これにはセッション クロスサイト ストレージの問題が関係します。クロスサイト ストレージを実現するには、データベースまたは共有ストレージを使用してセッション データを保存します。


データベースを使用してセッション データを保存する
  1. まず、セッション データが保存されているサーバー上で、PHP のセッション ストレージ メソッドをデータベース ストレージとして構成する必要があります。たとえば、次のようになります。 MySQL データベースを使用してセッションを保存します。データ:
session_id($_GET["PHPSESSID"]);
session_start();

// 读取Session数据
$data = $_SESSION["data"];
ログイン後にコピー

次に、セッションの保存と読み取りを実現するために、対応するデータベース オペレーション コードを記述する必要があります。たとえば、ログイン時に、ログインしているユーザーのセッション データをデータベースに保存できます。

// 设置Session存储方式为数据库存储
ini_set("session.save_handler", "user");
ini_set("session.save_path", "mysql://user:password@localhost/database/session_table");
ログイン後にコピー

他のサイトのページでも、同じセッション保存方法を設定し、データベース内のセッション データの読み取りに対応するデータベース オペレーション コード。

共有ストレージを使用してセッション データを保存する
  1. データベース ストレージに加えて、共有ストレージをセッション データの保存にも使用できます。たとえば、Redis または Memcached を共有ストレージとして使用して、セッションのクロスサイト ストレージを実装できます。まず、セッション データが保存されているサーバーに Redis サービスまたは Memcached サービスをインストールして構成する必要があります。次に、PHP のセッション ストレージ メソッドを共有ストレージとして構成します。たとえば、Redis を使用してセッション データを保存します。
session_start();

// 存储Session数据到数据库中
$_SESSION["username"] = "user";
$_SESSION["role"] = "admin";
ログイン後にコピー

次に、セッション ストレージと読み取りを実装するための対応するコードを記述する必要があります。たとえば、ログイン ユーザーのセッション データを Redis に保存します。

// 设置Session存储方式为Redis存储
ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://localhost:6379");
ログイン後にコピー

他のサイトのページでも、同じセッション ストレージ メソッドを構成し、セッション データを読み取るための対応するコードを記述する必要があります。 Redis で。

データベースまたは共有ストレージを使用してセッション データを保存すると、クロスサイト ストレージが実現され、異なるサイト間でのセッション データの共有が容易になります。

概要:

この記事では、PHP セッションのクロスドメインおよびクロスサイト ストレージについて紹介します。Cookie と URL パラメータを使用してセッション ID を渡し、データベースと共有ストレージを使用してセッション ID を渡す具体的なコード例を示します。セッション データの保存 具体的なコード例。実際の開発では、プロジェクトのニーズとセキュリティ要件に応じて、適切な方法を選択して、セッションのクロスドメインおよびクロスサイト ストレージを実装できます。

以上がPHP セッションのクロスドメインおよびクロスサイトのストレージ関連付けの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート