ホームページ  >  記事  >  ウェブフロントエンド  >  Ajaxのクロスドメインアクセス、セッションが保存できない等の問題の解決方法。

Ajaxのクロスドメインアクセス、セッションが保存できない等の問題の解決方法。

一个新手
一个新手オリジナル
2017-09-27 09:59:061857ブラウズ


ブラウザの保護ルールに従って、クロスドメイン アクセス中に作成したセッション ID はブラウザによって保存されません このように、クロスドメイン アクセスを実行すると、セッション ID は保存されません。つまり、リクエストが行われるたびに、サーバーはそれが同じ人ではなく新しい人であると認識します。この問題を解決するには、次の方法でこのクロスドメイン方法を解決できます。

Ajaxリクエストに構成を追加します

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

withCredentialsについて

withCredentials:
デフォルトでは、クロスオリジン要求は資格情報 (Cookie、HTTP 認証、クライアント SSL 証明書など) を提供しません。 withCredentials プロパティを true に設定することで、特定のリクエストで資格情報を送信するように指定できます。サーバーが認証情報付きのリクエストを受信すると、次の HTTP ヘッダーで応答します。

「Access-Control-Allow-Credentials: true」

資格情報を含むリクエストが送信されたが、サーバーの応答に上記のヘッダーが含まれていない場合、ブラウザは応答を JavaScript に渡しません(したがって、responseTextには空の文字列が含まれ、status の値は 0 になり、onerror() イベント ハンドラーが呼び出されます)。さらに、サーバーはこの HTTP ヘッダーをプリフライト応答で送信して、オリジンが資格情報を含むリクエストの送信を許可されていることを示すこともできます。

withCredentials 属性をサポートするブラウザには、Firefox 3.5 以降、Safari 4 以降、Chrome が含まれます。 IE10以前のバージョンはサポート対象外です。
同時に

注意

基本的な許可クロスドメインレスポンスヘッダーを追加した後
Access-Allow-Credentials: trueを追加する必要があります
さらに、Googleのセキュリティポリシーにより
withCredentialsがtrueの場合
Access-Allow -ResponseHeader の Origin ではワイルドカード '*' を使用できません
それ以外の場合は、プロンプトが表示されます

認証情報フラグが true の場合、'Access-Control-Allow-Origin' ヘッダーにワイルドカード '*' を使用することはできません

。したがって、オリジン「http://url」へのアクセスは許可されません。

テスト対象の他のブラウザ

ブラウザの保護ルールによると、ドメインを越える場合、作成したセッションIDはブラウザによって保存されませんこのようにして、クロスドメイン アクセスを実行すると、sessionId は保存されなくなります。つまり、リクエストが行われるたびに、サーバーはそれを同じ人ではなく新しい人だと判断します。この問題については、次のとおりです。このクロスドメイン問題を解決するには、いくつかの方法があります。

Ajaxリクエストに構成を追加します

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

withCredentialsについて

withCredentials:
デフォルトでは、クロスオリジン要求は資格情報 (Cookie、HTTP 認証、クライアント SSL 証明書など) を提供しません。 withCredentials プロパティを true に設定することで、特定のリクエストで資格情報を送信するように指定できます。サーバーが認証情報付きのリクエストを受信すると、次の HTTP ヘッダーで応答します。

「Access-Control-Allow-Credentials: true」

資格情報を含むリクエストが送信されたが、サーバーの応答に上記のヘッダーが含まれていない場合、ブラウザは応答を JavaScript に渡しません(したがって、responseTextには空の文字列が含まれ、status の値は 0 になり、onerror() イベント ハンドラーが呼び出されます)。さらに、サーバーはこの HTTP ヘッダーをプリフライト応答で送信して、オリジンが資格情報を含むリクエストの送信を許可されていることを示すこともできます。

withCredentials 属性をサポートするブラウザには、Firefox 3.5 以降、Safari 4 以降、および Chrome が含まれます。 IE10以前のバージョンはサポート対象外です。
同時に

注意

基本的な許可クロスドメインレスポンスヘッダーを追加した後
Access-Allow-Credentials: trueを追加する必要があります
さらに、Googleのセキュリティポリシーにより
withCredentialsがtrueの場合
Access-Allow - ResponseHeader の Origin ではワイルドカード '*' を使用できません
それ以外の場合は、プロンプトが表示されます

資格情報フラグが true の場合、ワイルドカード '*' を 'Access-Control-Allow-Origin' ヘッダーで使用することはできません。したがって、「://url」へのアクセスは許可されません。

他のブラウザはテスト対象です

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

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