ホームページ  >  記事  >  バックエンド開発  >  PHP セッションのクロスドメイン問題の解決策

PHP セッションのクロスドメイン問題の解決策

PHPz
PHPzオリジナル
2023-10-12 15:00:251279ブラウズ

PHP Session 跨域问题的解决方法

PHP セッションのクロスドメイン問題の解決策

フロントエンドとバックエンドが分離されている開発では、クロスドメインリクエストが標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。

1. Cookie を使用してドメイン間でセッションを共有する

最も一般的な解決策は、Cookie を使用してドメイン間でセッションを共有することです。 Cookie は同一生成元ポリシーによって制限されないため、異なるドメイン名間でセッション情報を転送および共有できます。

具体的な手順は次のとおりです。

  1. サーバー側で次のようにセッションを設定します。
session_start();
$_SESSION['user'] = 'example';
  1. セッション ID を保存します。 Cookie 内の情報、例:
setcookie(session_name(), session_id(), time() + 60*60*24*30, '/', 'www.example.com', false, true);

このうち、www.example.com は現在のサーバーのドメイン名であり、実際の状況に応じて変更する必要があります。 。

  1. クロスドメイン リクエストのクライアントでは、次のような Cookie を使用してリクエストを送信します。
fetch('http://www.example.com/api', {
  credentials: 'include',
})

その中には、credentials: 'include' Use これは、Cookie を含む認証情報をサーバーに送信するようにブラウザに指示します。

  1. サーバーは Cookie を解析し、次のようなセッションをリセットします:
session_id($_COOKIE[session_name()]);
session_start();
if(isset($_SESSION['user'])){
    // session 跨域共享成功
}else{
    // session 跨域共享失败
}

2. トークンを使用してドメイン間でセッションを共有します

別の解決策トークンは、セッションのクロスドメイン共有を実現するために使用されます。具体的な手順は次のとおりです。

  1. ログインすると、次のようなトークンが生成され、ユーザーに関連付けられてデータベースに保存されます。 #In クライアントはトークンをローカルの localStorage または sessionStorage に保存します。
クロスドメインリクエストを行う場合は、トークンをパラメータとして、またはリクエストヘッダーとしてサーバーに送信します。
  1. サーバーはトークンを解析し、データベースにクエリを実行してトークンの有効性を検証し、対応するセッションの設定と管理を実行します。
  2. なお、セキュリティを確保するため、トークンには有効期間を設定し、一定期間内に更新する必要があります。サーバー側では、期限切れのトークンを定期的にクリーンアップする必要があります。
  3. 概要:

上記は、PHP セッションのクロスドメインの問題を解決する 2 つの一般的な方法であり、実際の状況に応じて適切な解決策を選択できます。 Cookie を使用するかトークンを使用するかに関係なく、セッションのクロスドメイン共有を実現するには、サーバー側で対応する処理を実行する必要があります。同時に、セキュリティを確保するために、セッションデータのセキュリティを保護するための何らかの対策も講じる必要があります。

以上がPHP セッションのクロスドメイン問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。