사용자가 내 사이트에 로그인하여 아이디를 저장 $_SESSION
하고 브라우저에서 ‘저장’버튼을 클릭하면 서버에 AJAX 요청이 발생합니다. 하나님의 뜻 $_SESSION
과 쿠키는이 요청에 유지, 그리고 안전하게의 id 존재 존재에 의존 할 수 $_SESSION
?
답변
대답은 ‘예’입니다.
세션은 서버 측에서 유지 관리됩니다. 서버에 관한 한 AJAX 요청과 일반 페이지 요청 사이에는 차이가 없습니다. 둘 다 HTTP 요청이며 동일한 방식으로 헤더에 쿠키 정보를 포함합니다.
클라이언트 측에서 일반 쿠키이든 AJAX 요청이든 동일한 쿠키가 항상 서버로 전송됩니다. Javascript 코드는 특별한 작업을 수행하거나 이러한 상황을 인식 할 필요가 없으며 일반 요청과 동일하게 작동합니다.
답변
PHP 파일에 AJAX 요청이 있으면 session_start()
세션 정보가 유지됩니다. (요청이 동일한 도메인 내에 있음)
답변
실제로 얻는 것은 쿠키가 AJAX 요청과 함께 전송됩니까? AJAX 요청이 동일한 도메인 (또는 쿠키의 도메인 제약 조건)에 있다고 가정하면 대답은 예입니다. 따라서 동일한 서버로 다시 AJAX 요청은 동일한 세션 정보를 유지합니다 (호출 된 스크립트가 세션 정보에 액세스하려는 다른 PHP 스크립트에 따라 session_start ()를 발행한다고 가정).
답변
항상 그런 것은 아닙니다. 쿠키를 사용하면 좋습니다. 그러나 “현재 존재하는 ID에 안전하게 의존 할 수 있는가? “ 는 중요한 점으로 논의를 확대 할 것을 촉구했다.
쿠키 대신 URL을 다시 작성하여 세션을 유지하도록 PHP를 구성 할 수 있습니다. ( 좋은 점과 나쁜 점 (<-예를 들어 맨 위의 주석 참조)은 별도의 질문입니다 . 이제 단 하나의 메모만으로 현재 질문을 고수합시다 : URL 기반 세션에서 가장 두드러진 문제-뻔뻔스러운 알몸 세션 ID의 가시성-내부 Ajax 호출의 문제는 아니지만 Ajax에 대해 켜져 있으면 나머지 사이트에서도 켜집니다.)
URL 재 작성 (쿠키리스) 세션의 경우 Ajax 호출은 요청 URL이 올바르게 작성되도록 스스로 처리해야합니다 . (또는 사용자 정의 솔루션을 롤링 할 수도 있습니다. 덜 까다로운 경우 클라이언트 측 에서 세션을 유지 관리하는 데 의존 할 수도 있습니다 .) 쿠키를 사용하지 않는 경우 세션 연속성에 필요한 명시적인 관리가 중요합니다.
-
Ajax 호출 이 HTML에서 URL을 그대로 추출 하면 (PHP에서 수신 한대로) 이미 쿠킹 (umm, 쿠킹)되었으므로 괜찮습니다.
-
요청 URI 자체 를 어셈블 해야하는 경우 세션 ID를 URL에 수동으로 추가해야합니다. ( 여기 에서 또는 URL 재 작성 기능이있는 PHP로 생성 된 페이지 소스 를 확인하는 방법을 확인하십시오.)
에서 OWASP.org :
효과적으로, 웹 애플리케이션은 메커니즘, 쿠키 또는 URL 매개 변수를 모두 사용하거나 특정 조건이 충족되는 경우 (예 : 쿠키를 지원하지 않는 웹 클라이언트의 존재 또는 쿠키가 아닌 경우) 자동 전환 (자동 URL 재 작성) 사용자 개인 정보 보호 문제로 인해 허용됨).
A로부터 루비 포럼 게시물 :
쿠키와 함께 PHP를 사용하면 세션 ID가 Ajax XMLHttpRequests의 경우에도 요청 헤더로 자동 전송됩니다. URL 기반 PHP 세션을 사용하거나 허용하는 경우 모든 Ajax 요청 URL에 세션 ID를 추가해야합니다.
답변
AJAX 요청은 세션을 유지하는 것이 매우 중요합니다. 가장 쉬운 예는 관리자 패널에 대해 AJAX 요청을 시도 할 때입니다. 물론 관리자 로그인 후 세션이없는 다른 사람이 액세스 할 수 없도록 요청한 페이지를 보호해야합니다. 말이된다?
답변
그러나 특히 프레임 워크를 사용하는 경우 응용 프로그램이 요청간에 세션 ID를 재생성하는지 확인하는 것이 좋습니다. 세션 ID에 명시 적으로 의존하는 것은 문제가 발생할 수 있습니다. 세션은 영향을받지 않습니다.
애플리케이션이 이와 같은 세션 ID를 재생성하는 경우, 요청 페이지에서 ajax 요청이 실제로 세션 ID를 무효화 / 대체하는 상황이 발생할 수 있습니다.
답변
예를 들어 Front Controller 또는 boostrap 스크립트에서 세션을 초기화하는 경우 페이지 컨트롤러 또는 ajax 컨트롤러에 대한 초기화에 신경 쓸 필요가 없습니다. PHP 프레임 워크는 만병 통치약은 아니지만 이와 같은 많은 유용한 기능을 수행합니다!