복붙노트

[JQUERY] 왜 jQuery의 아약스는 내 세션 쿠키를 전송하지 () 메소드입니까?

JQUERY

왜 jQuery의 아약스는 내 세션 쿠키를 전송하지 () 메소드입니까?

해결법


  1. 1.URL에 당신이있는 거 호출이 호출하는 스크립트와 같은 도메인에있는 경우 AJAX에만 쿠키를 보내 호출합니다.

    URL에 당신이있는 거 호출이 호출하는 스크립트와 같은 도메인에있는 경우 AJAX에만 쿠키를 보내 호출합니다.

    이것은 크로스 도메인 문제 일 수 있습니다.

    어쩌면 당신은 당신의 전화 스크립트가 www.domain-b.com에있는 동안 즉 (www.domain-a.com에서 URL을 호출하려고 : 당신은 브라우저가 쿠키를 전송하지 않을 경우에 도메인 간 전화를했다 ) 귀하의 개인 정보를 보호 할 수 있습니다.

    이 경우 옵션은 다음과 같습니다 :

    즉 조금이라도 도움이 있다면 다행.


  2. 2.나는 크로스 도메인 시나리오에서 운영하고 있습니다. 원격 서버에 로그인하는 동안 true로 설정 액세스 제어 - 허용 - 자격 증명과 함께 설정-Cookie 헤더를 반환합니다.

    나는 크로스 도메인 시나리오에서 운영하고 있습니다. 원격 서버에 로그인하는 동안 true로 설정 액세스 제어 - 허용 - 자격 증명과 함께 설정-Cookie 헤더를 반환합니다.

    원격 서버에 다음 Ajax 호출이 쿠키를 사용합니다.

    CORS의 액세스 제어 - 허용 - 자격 증명은 도메인 간 로깅이 허용하는 것입니다. 예제 https://developer.mozilla.org/En/HTTP_access_control을 확인합니다.

    나에게는 (또는 적어도 다음 버전에서 기능에-수) JQuery와의 버그처럼 보인다.

    최신 정보:

    대답: 당신은 http://api.jquery.com/jQuery.ajax/의 xhrFields의 PARAM를 사용한다

    문서의 예는 다음과 같습니다

    $.ajax({
       url: a_cross_domain_url,
       xhrFields: {
          withCredentials: true
       }
    });
    

    그것은이 요청에 제대로뿐만 아니라 해당 서버의 응답을 중요합니다. 프레데릭과 @Pebbl @에서 좋은 의견을 여기에 복사 :

    중요 사항 : 자격증을 요청에 응답 할 때, 서버가 도메인을 지정해야하며, 야생 소면을 사용할 수 없습니다. 액세스 제어 - 허용 - 원산지 : 헤더는 다음과 같이 와일드 카드 경우 위의 예는 실패 *

    요청이있을 때 그래서 :

    Origin: http://foo.example
    Cookie: pageAccess=2
    

    서버가 응답해야합니다 :

    Access-Control-Allow-Origin: http://foo.example
    Access-Control-Allow-Credentials: true
    
    [payload]
    

    그렇지 않으면 페이로드는 스크립트에 반환되지 않습니다. 참조 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials


  3. 3.사용

    사용

    xhrFields: { withCredentials:true }
    

    내 jQuery를 아약스 호출의 일부로 솔루션의 일부였다. 나는 또한 내 자원에서 OPTIONS 응답에서 반환 된 헤더가 필요 :

    Access-Control-Allow-Origin : http://www.wombling.com
    Access-Control-Allow-Credentials : true
    

    단지 하나의 "*" "기원"을 허용하는 옵션이 호출의 응답 헤더에 있었고,하지 않는 것이 중요했다. 나는 요청에서 기원을 읽고 다시 응답으로 그것을 채워이 달성 - 아마 제한에 대한 원래의 이유를 우회,하지만 내 사용의 경우 보안은 중요하지 않습니다.

    나는 크롬하지 않습니다 -하지만 공간을 허용 않는 W3C 표준은 분리 된 목록으로 가치가 명시 적으로, 하나의 기원에 대한 요구 사항을 언급 할 생각! http://www.w3.org/TR/cors/#access-control-allow-origin-response-header NB은 "실제로"비트.


  4. 4.당신의 초기화 기능이 넣어 :

    당신의 초기화 기능이 넣어 :

    $.ajaxSetup({
      xhrFields: {
        withCredentials: true
      }
    });
    

    그것은 작동합니다.


  5. 5.이이 질문에 좋은 답변을 많이는 이미,하지만 난 당신이 세션 쿠키는 쿠키 도메인 일치하기 때문에 전송 기대 곳에이 사건을 명확히하는 것이 도움이 될 수있다 생각하지만, AJAX 요청이 있기 때문에 그것은 보내지고 있지 않습니다 다른 하위 도메인에 만들어지고. 이 경우, 나는 * .mydomain.com을을 도메인에 할당 된 쿠키를 가지고 있고, 나는 그것이 "different.mydomain.com에 AJAX 요청에 포함하고자하고있다. 기본적으로 쿠키가 전송되지 않습니다. 이 문제를 해결하려면 세션 쿠키를 사용하지 않도록 Http 만 할 필요가 없습니다. 당신은 제안 그라운드, 움 블링 프리 나도 일을 (https://stackoverflow.com/a/23660618/545223)와 다음을 수행해야합니다.

    이이 질문에 좋은 답변을 많이는 이미,하지만 난 당신이 세션 쿠키는 쿠키 도메인 일치하기 때문에 전송 기대 곳에이 사건을 명확히하는 것이 도움이 될 수있다 생각하지만, AJAX 요청이 있기 때문에 그것은 보내지고 있지 않습니다 다른 하위 도메인에 만들어지고. 이 경우, 나는 * .mydomain.com을을 도메인에 할당 된 쿠키를 가지고 있고, 나는 그것이 "different.mydomain.com에 AJAX 요청에 포함하고자하고있다. 기본적으로 쿠키가 전송되지 않습니다. 이 문제를 해결하려면 세션 쿠키를 사용하지 않도록 Http 만 할 필요가 없습니다. 당신은 제안 그라운드, 움 블링 프리 나도 일을 (https://stackoverflow.com/a/23660618/545223)와 다음을 수행해야합니다.

    1) 아약스 요청에 다음을 추가합니다.

    xhrFields: { withCredentials:true }
    

    2) 다른 하위 도메인에있는 자원에 대한 응답 헤더에 다음을 추가합니다.

    Access-Control-Allow-Origin : http://original.mydomain.com
    Access-Control-Allow-Credentials : true
    

  6. 6.다른 솔루션을 시도하고 아직도 일에 점점 후, 나는 문제가 내 경우에는 무엇인지 알게되었습니다. 나는 "텍스트 / 일반"을 "응용 프로그램 / JSON"에서 contentType이 변경되었습니다.

    다른 솔루션을 시도하고 아직도 일에 점점 후, 나는 문제가 내 경우에는 무엇인지 알게되었습니다. 나는 "텍스트 / 일반"을 "응용 프로그램 / JSON"에서 contentType이 변경되었습니다.

    $.ajax(fullUrl, {
        type: "GET",
        contentType: "text/plain",
        xhrFields: {
             withCredentials: true
        },
        crossDomain: true
    });
    

  7. 7.나는이 같은 문제가 내 스크립트 그냥 단순히 세션 id 쿠키를받지 못하고 있었다 몇 가지 검사를하고 있었다.

    나는이 같은 문제가 내 스크립트 그냥 단순히 세션 id 쿠키를받지 못하고 있었다 몇 가지 검사를하고 있었다.

    내 프레임 워크 (장고) 기본값으로 Http 만 사용하여 세션 ID 쿠키를 통과했다는 브라우저의 세션 ID 쿠키 값을보고 알아 냈어. 이 스크립트는 세션 id 값에 접근하지 않았고, 따라서 요청과 함께 그것을 전달되지 않았 음을 의미했다. 많은 일들이 액세스 제한을 필요로하는 Ajax를 사용하는 경우 종류 말도의 Http 만하는 기본 값이 될 것입니다.

    이 내가 설정 (SESSION_COOKIE_HTTPONLY = 거짓)을 변경 해결하려면 있지만, 다른 경우는 쿠키 경로에 "Http 만"플래그 될 수있다


  8. 8.당신은 로컬 호스트 나 로컬 호스트에 localhost와 같은 포트에서 개발하는 경우 : 8080 위의 답변에 설명 된 단계에 추가하여, 당신은 또한 당신의 Set-Cookie 헤더의 도메인 값을 전달되지 않도록해야합니다. 잘못된입니다 - - 당신은 Set-Cookie 헤더에 localhost로 도메인을 설정할 수 없습니다 단지 도메인을 생략합니다.

    당신은 로컬 호스트 나 로컬 호스트에 localhost와 같은 포트에서 개발하는 경우 : 8080 위의 답변에 설명 된 단계에 추가하여, 당신은 또한 당신의 Set-Cookie 헤더의 도메인 값을 전달되지 않도록해야합니다. 잘못된입니다 - - 당신은 Set-Cookie 헤더에 localhost로 도메인을 설정할 수 없습니다 단지 도메인을 생략합니다.

    명시 적 도메인과 로컬 호스트에서 쿠키를 참조 왜 asp.net 로컬 호스트에서 쿠키를 만들 것인가?


  9. 9.때 로컬 호스트와 디바이스 환경에서 PHPSESSID 쿠키 문제를 설정하는 방법에 대한 그냥 내 2 센트. 나는 locahost 내 REST API를 엔드 포인트에 대한 AJAX 호출을합니다. 그 주소가 mysite.localhost / API / 회원 / 로그인 / (내 dev에 환경에 virtal 호스트) 말한다.

    때 로컬 호스트와 디바이스 환경에서 PHPSESSID 쿠키 문제를 설정하는 방법에 대한 그냥 내 2 센트. 나는 locahost 내 REST API를 엔드 포인트에 대한 AJAX 호출을합니다. 그 주소가 mysite.localhost / API / 회원 / 로그인 / (내 dev에 환경에 virtal 호스트) 말한다.

    이 크로스 기원 기원 요청 쿠키 문제입니다 그래서 @flu의 대답은 위에서 언급 한 바와 같이


  10. 10.경우에 내 시나리오 및 솔루션을 추가 그것은 누군가 다른 사람을 도움이됩니다. 편안하고 API를 사용할 때 유사한 경우가 발생했습니다. HTML / 스크립트 / CSS 파일 및 응용 프로그램 서버 노출 API를 호스트 내 웹 서버는 동일한 도메인에서 호스팅되었습니다. 그러나 경로가 달랐다.

    경우에 내 시나리오 및 솔루션을 추가 그것은 누군가 다른 사람을 도움이됩니다. 편안하고 API를 사용할 때 유사한 경우가 발생했습니다. HTML / 스크립트 / CSS 파일 및 응용 프로그램 서버 노출 API를 호스트 내 웹 서버는 동일한 도메인에서 호스팅되었습니다. 그러나 경로가 달랐다.

    세트 쿠키 위 예제 코드는 MyCookie라는 이름의 사용 abc.js

    되는 API 호출이 이루어졌다

    나는 사용자 도메인 / webapis / 서비스 이름의 쿠키를 기대하고 읽는 시도했지만이 전송되지 아니 하였다. 답에서 주석을 읽은 후, 브라우저의 개발 도구에서 확인이 위 예제 코드는 MyCookie의 경로에 서비스 호출을 사용할 수 없습니다 따라서 "/ 웹 페이지"를로 설정

    JQuery와에서 쿠키를 설정하는 동안 그래서,이 내가 무슨 짓을 -

    $.cookie("mycookie","mayvalue",{**path:'/'**});
    

  11. 11.아마도 100 %는 질문에 대답,하지만 난 innovastudio 편집기의 assetmanager에서 파일 업로드를 아약스 - 게시 세션 문제를 해결의 희망이 글타래에 비틀 거렸다. 결국 해결책은 간단했다 : 그들은 플래시 업 로더를 가지고있다. 그 (설정을 비활성화

    아마도 100 %는 질문에 대답,하지만 난 innovastudio 편집기의 assetmanager에서 파일 업로드를 아약스 - 게시 세션 문제를 해결의 희망이 글타래에 비틀 거렸다. 결국 해결책은 간단했다 : 그들은 플래시 업 로더를 가지고있다. 그 (설정을 비활성화

    var flashUpload = false;   
    

    asset.php에)와 조명이 다시 깜박 시작했다.

    이러한 문제를 디버깅하는 것은 매우 어려울 수 있습니다으로 내가 업로드 처리기에서 다음과 같은 퍼팅 바른 길에 (이 경우, 나를 잘)을 설정합니다 발견 :

    $sn=session_name();
    error_log("session_name: $sn ");
    
    if(isset($_GET[$sn])) error_log("session as GET param");
    if(isset($_POST[$sn])) error_log("session as POST param");
    if(isset($_COOKIE[$sn])) error_log("session as Cookie");
    if(isset($PHPSESSID)) error_log("session as Global");
    

    로그에 다이빙과 나는 빨리 더 쿠키가 전송되지 않은 누락 된 세션을 발견했다.

  12. from https://stackoverflow.com/questions/2870371/why-is-jquerys-ajax-method-not-sending-my-session-cookie by cc-by-sa and MIT license