Ajax 도메인 간 액세스 문제, 세션을 저장할 수 없는 문제 등을 해결하는 방법

一个新手
풀어 주다: 2017-09-27 09:59:06
원래의
1849명이 탐색했습니다.


브라우저의 보호 규칙에 따라 우리가 생성한 세션 ID는 도메인 간 액세스 중에 브라우저에 저장되지 않습니다. 이러한 방식으로 도메인 간 액세스를 수행하면 세션 ID가 저장되지 않습니다. 즉, 요청이 있을 때마다 서버는 동일한 사람이 아닌 새로운 사람이라고 생각하게 됩니다. 이 문제를 해결하기 위해 다음 방법으로 이 크로스 도메인 방법을 해결할 수 있습니다.

Ajax 요청에 구성 추가

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

withCredentials 정보

withCredentials:
기본적으로 교차 출처 요청은 자격 증명(쿠키, HTTP 인증, 클라이언트 SSL 인증 등)을 제공하지 않습니다. withCredentials 속성을 true로 설정하여 특정 요청이 자격 증명을 보내도록 지정할 수 있습니다. 서버가 자격 증명이 포함된 요청을 받으면 다음 HTTP 헤더로 응답합니다.

"Access-Control-Allow-Credentials: true"

인증 정보가 포함된 요청이 전송되었지만 서버의 응답에 위 헤더가 포함되지 않은 경우 브라우저는 JavaScript에 응답을 전달하지 않습니다(따라서 responseText 빈 문자열을 포함하고 상태 값은 0이며 onerror() 이벤트 핸들러가 호출됩니다. 또한 서버는 원본이 자격 증명이 포함된 요청을 보낼 수 있음을 나타내기 위해 Preflight 응답에 이 HTTP 헤더를 보낼 수도 있습니다.

withCredentials 속성을 지원하는 브라우저에는 Firefox 3.5+, Safari 4+ 및 Chrome이 포함됩니다. IE10 이하 버전은 지원되지 않습니다.
동시에

참고

기본 허용 교차 도메인 응답 헤더를 추가한 후
Access-Allow-Credentials: true를 추가해야 합니다.
또한 Google의 보안 정책으로 인해
withCredentials가 true인 경우
Access-Allow -ResponseHeader의 출처는 와일드카드 '*'를 사용할 수 없습니다.
그렇지 않으면 자격 증명 플래그가 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:
기본적으로 교차 출처 요청은 자격 증명(쿠키, HTTP 인증, 클라이언트 SSL 인증 등)을 제공하지 않습니다. withCredentials 속성을 true로 설정하여 특정 요청이 자격 증명을 보내도록 지정할 수 있습니다. 서버가 자격 증명이 포함된 요청을 받으면 다음 HTTP 헤더로 응답합니다.

"Access-Control-Allow-Credentials: true"

인증 정보가 포함된 요청이 전송되었지만 서버의 응답에 위 헤더가 포함되지 않은 경우 브라우저는 JavaScript에 응답을 전달하지 않습니다(따라서 responseText 빈 문자열을 포함하고 상태 값은 0이며 onerror() 이벤트 핸들러가 호출됩니다. 또한 서버는 원본이 자격 증명이 포함된 요청을 보낼 수 있음을 나타내기 위해 Preflight 응답에 이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!