sourcecode

AJAX 요청은 PHP 세션 정보를 유지합니까?

copyscript 2022. 9. 6. 22:23
반응형

AJAX 요청은 PHP 세션 정보를 유지합니까?

사용자가 내 사이트에 로그인하여 자신의 ID를 저장했을 경우$_SESSION브라우저로부터 「Save(저장)」버튼을 클릭해, 서버에 AJAX 요구를 송신했습니다.윌의$_SESSION및 쿠키는 이 요청으로 유지되며, 이 ID에 안전하게 의존할 수 있습니까?$_SESSION?

답은 '그렇다'입니다.

세션은 서버 측에서 유지됩니다.서버에 관한 한 AJAX 요청과 일반 페이지 요청 사이에는 차이가 없습니다.둘 다 HTTP 요구이며 둘 다 헤더에 동일한 방식으로 cookie 정보를 포함합니다.

클라이언트측에서는, 통상의 요구인지 AJAX 요구인지에 관계없이, 항상 같은 쿠키가 서버에 송신됩니다.Javascript 코드는 특별한 작업을 할 필요도 없고, 이러한 상황을 인지할 필요도 없으며, 일반 요청과 동일하게 작동합니다.

PHP 파일에 AJAX 요청이 있는 경우session_start()세션 정보는 유지됩니다.(요구를 차단하는 것은 같은 도메인 내에 있습니다)

실제로 말하고자 하는 것은 쿠키가 AJAX 요청과 함께 전송되는가 하는 것입니다.AJAX 요구가 같은 도메인(또는 cookie의 도메인 제약 조건 내)에 있다고 가정하면 대답은 "예"입니다.따라서 동일한 서버에 대한 AJAX 요구는 동일한 세션 정보를 유지합니다(콜된 스크립트가 세션 정보에 대한 액세스를 원하는 다른 PHP 스크립트에 따라 session_start()를 발행한다고 가정합니다).

음, 항상은 아니야쿠키를 사용하는 것은 잘합니다.그러나 "Id가 존재하는 것을 안전하게 신뢰할 수 있는가"는 중요한 점(대부분은 이 페이지의 방문자 수가 상당히 높은 것 같기 때문에 참조)을 가지고 논의를 연장할 것을 촉구했습니다.

쿠키 대신 URL 개서를 통해 세션을 유지하도록 PHP를 구성할 수 있습니다.( 어떻게 그것이 나쁘던지(<--예를 참조하십시오. 맨 위에서 언급 좋은 거)은 별도의 질문, 지금 현재 하나로, 단 하나의 side-note을 고수하고 있어 보자:URL-based 5가장 중요한 사실은 벌거벗은 세션 ID의 노골적인 가시성--내부 아약스로 전화가 문제가 아니다; 하지만 만약 그것이 아약스 켜지면, 항의라도에 같은 것입니다.r 나머지 사이트도 마찬가지입니다.그러니까...)

URL 개서(cookieless) 세션의 경우 Ajax 콜은 요청 URL이 적절하게 작성되었는지 직접 처리해야 합니다(또는 사용자 지정 솔루션을 롤링할 수도 있습니다).요구가 적은 경우 클라이언트 측에서의 세션 유지에 의지할 수도 있습니다).중요한 것은 cookie를 사용하지 않는 경우 세션 연속성에 대한 명시적 주의가 필요하다는 것입니다.

  1. Ajax 콜이 HTML에서 URL을 말 그대로 추출하는 경우(PHP에서 수신한 바와 같이), 이미 조리되어 있기 때문에 괜찮습니다(음, 조리되어 있습니다).

  2. 요청 URI를 직접 조립할 필요가 있는 경우 세션 ID를 URL에 수동으로 추가해야 합니다.(URL 개서를 활성화한 상태에서 PHP에 의해 생성된 페이지 소스를 체크하여 방법을 확인하십시오.)


OWASP.org 에서 :

실제로 웹 어플리케이션은 특정 조건(예를 들어 쿠키가 지원되지 않는 웹 클라이언트의 존재 또는 사용자의 프라이버시 문제로 인해 쿠키가 받아들여지지 않는 경우 등)이 충족되면 두 메커니즘, 쿠키 또는 URL 파라미터를 모두 사용할 수 있습니다.또한 다른 조건(URL 자동 개서)으로 전환할 수도 있습니다.

Ruby-forum 투고 내용:

쿠키와 함께 php를 사용하면 Ajax XMLHttpRequests에서도 세션 ID가 요청 헤더로 자동으로 전송됩니다.URL 기반 php 세션을 사용하거나 허용하는 경우 세션 ID를 모든 Ajax 요청 URL에 추가해야 합니다.

AJAX 요청은 세션을 유지하는 것이 매우 중요합니다.가장 쉬운 예는 관리 패널에 대해 AJAX 요청을 실행하려고 하는 경우입니다.물론 관리자 로그인 후 세션이 없는 다른 사용자가 액세스할 수 없도록 요청한 페이지를 보호합니다.말이 되나요?

주의할 점은 특히 프레임워크를 사용하는 경우 응용 프로그램이 요청 간에 세션 ID를 재생성하고 있는지 확인하는 것입니다. 세션 ID에 명시적으로 의존하는 모든 데이터에 문제가 발생하지만 세션의 나머지 데이터는 영향을 받지 않습니다.

응용 프로그램이 이와 같이 세션 ID를 재생성할 경우 요청 페이지에서 Ajax 요청이 세션 ID를 사실상 비활성화하거나 대체하는 상황이 발생할 수 있습니다.

Front Controller나 Boostrap Script에서 세션을 초기화할 경우 페이지 컨트롤러나 Ajax 컨트롤러 모두 초기화에 신경 쓸 필요가 없습니다.PHP 프레임워크는 만병통치약은 아니지만 이렇게 많은 유용한 일을 합니다!

session() auth를 모든 서버 사이드 페이지에 저장합니다.

if(require_once("auth.php")) {

//run json code

}

// do nothing otherwise

그게 내가 해온 유일한 방법이야

언급URL : https://stackoverflow.com/questions/676846/do-ajax-requests-retain-php-session-info

반응형