ホームページ  >  記事  >  バックエンド開発  >  PHPでクロスドメイン自動ログインを実装する方法

PHPでクロスドメイン自動ログインを実装する方法

PHPz
PHPzオリジナル
2023-04-04 10:40:29849ブラウズ

Web アプリケーションの人気が高まるにつれて、クロスドメインの問題を回避することがますます困難になっています。ユーザーがあるドメイン名から別のドメイン名にアクセスする場合、ユーザー エクスペリエンスを向上させるために、異なるドメイン名間で自動的にログインする必要がある場合があります。この場合、自動クロスドメイン ログインには PHP が効果的な選択肢となります。この記事では、PHPを使用してクロスドメイン自動ログインを実装する方法を紹介します。

1. クロスドメイン Cookie の取得

クロスドメイン自動ログインを実現するには、まずソース ドメイン名でユーザーの Cookie を取得する必要があります。 Cookie はドメインを越えてアクセスできないため、ajax を使用してサーバーにリクエストを送信し、ソース ドメイン名で Cookie を取得する必要があります。

ソース ドメイン ネーム サーバー上で、Cookie を取得するために「get_cookie.php」という名前の PHP ファイルを作成する必要があります。コードは次のとおりです。

<?php
header(&#39;Access-Control-Allow-Origin: *&#39;);
if ($_SERVER[&#39;REQUEST_METHOD&#39;] == &#39;POST&#39;) {
  if (isset($_COOKIE[&#39;user&#39;])) {
    echo $_COOKIE[&#39;user&#39;];
  } else {
    echo &#39;Cookie not found.&#39;;
  }
}
?>

コードでは、ヘッダー関数を使用して、クロスドメイン アクセスを許可するように「Access-Control-Allow-Origin」ヘッダー ファイルを設定します。ユーザー Cookie が存在する場合は Cookie が呼び出し元に返され、存在しない場合は「Cookie が見つかりません。」が返されます。

2. ドメイン間で Cookie を送信する

ソース ドメインの Cookie を取得した後、それをターゲット ドメインに送信する必要があります。セキュリティを確保するため、Cookie 値をターゲット ドメインに直接送信することはできません。代わりに、暗号化テクノロジーを使用して Cookie を処理する必要があります。この例では、Base64 エンコード テクノロジの使用を選択します。

ターゲット ドメイン ネーム サーバー上で、ソース ドメインから送信された Cookie を処理するために、「login.php」という名前の PHP ファイルを作成する必要があります。コードは次のとおりです。

<?php
$user = $_POST[&#39;user&#39;];
if (!empty($user)) {
  $user = base64_decode($user);
  $user_arr = explode(&#39;,&#39;, $user);
  if (count($user_arr) == 2) {
    $username = $user_arr[0];
    $password = $user_arr[1];
    //check user credentials and login
    //...
    echo &#39;success&#39;;
  } else {
    echo &#39;Invalid cookie data.&#39;;
  }
} else {
  echo &#39;Cookie not found.&#39;;
}
?>

コードでは、まず $_POST 変数を使用して、ソース ドメインから送信された Cookie を取得します。次に、Cookie を Base64 デコードし、ユーザー名とパスワードに分割します。次に、ユーザー名とパスワードを使用してログインし、ログイン成功後に呼び出し元に「success」文字列を返します。 Cookieデータが無効な場合は、「Cookieデータが無効です。」を返します。

3. iframe を使用して自動ジャンプを実現する

最後に、iframe を使用してソース ドメインとターゲット ドメインの間を自動的にジャンプする必要があります。ソース ドメイン上で、次のコードを含む "login.html" という名前の HTML ファイルを作成します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cross-Domain Login</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(function() {
  $.ajax({
    url: 'https://example.com/get_cookie.php',
    method: 'POST',
    success: function(data) {
      var iframe = $('<iframe/>', {
        src: 'https://targetdomain.com/login.php',
        style: 'display:none;'
      });
      $('body').append(iframe);
      iframe.load(function() {
        iframe.contents().find('body').append('<form method="post" action="https://targetdomain.com/login.php"><input type="hidden" name="user" value="&#39; + data + &#39;"></form>');
        iframe.contents().find('form').submit();
      });
    },
    error: function() {
      alert('Failed to get cookie.');
    }
  });
});
</script>
</head>
<body>
<p>Loading...</p>
</body>
</html>

コードでは、jQuery ライブラリを使用して、ソース ドメイン Cookie を取得するための Ajax リクエストを開始します。次に、非表示の iframe を作成し、body 要素に追加しました。 iframe の読み込みが完了すると、Cookie を POST フォームに追加し、そのフォームを使用してターゲット ドメインでログイン リクエストを開始します。

ユーザーが「https://sourcedomain.com/login.html」を開くと、ページは Cookie を取得するための POST リクエストを自動的に送信します。次に、非表示の iframe ページが開き、ログイン情報が自動的に入力されて自動ログインが完了します。

概要

この記事では、PHP を使用してクロスドメイン自動ログインを実装する方法を紹介します。まず、Ajax リクエストを使用してソース ドメインの Cookie を取得し、次に Base64 エンコードを使用して Cookie を暗号化し、ターゲット ドメインで POST フォームを使用して復号化します。最後に、iframe を使用して、ソース ドメインとターゲット ドメインの間を自動的に移動します。この方法を使用すると、比較的高いセキュリティを維持しながら、ユーザーに優れたエクスペリエンスを提供できるため、習得する価値があります。

以上がPHPでクロスドメイン自動ログインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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