답변:
대답은 '예'입니다.
세션은 서버 측에서 유지 관리됩니다. 서버에 관한 한 AJAX 요청과 일반 페이지 요청 사이에는 차이가 없습니다. 둘 다 HTTP 요청이며 동일한 방식으로 헤더에 쿠키 정보를 포함합니다.
클라이언트 측에서 일반 쿠키이든 AJAX 요청이든 동일한 쿠키가 항상 서버로 전송됩니다. Javascript 코드는 특별한 작업을 수행하거나 이러한 상황을 인식 할 필요가 없으며 일반 요청과 동일하게 작동합니다.
Warning: session_write_close(): Failed to write session data (user)
프로젝트에서 최근에 간헐적으로 오류가 발생했지만 나머지 페이지를로드하는 동안 AJAX 요청이 발생할 때만 가능합니다. 세션 데이터에 MySQL DB를 사용하고 있으며 기본 페이지 요청이 해당 테이블을 잠 가서 AJAX 요청이 액세스하지 못하게 할 수 있습니다.
실제로 얻는 것은 쿠키가 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 요청을 시도 할 때입니다. 물론 관리자 로그인 후 세션이없는 다른 사람이 액세스 할 수 없도록 요청한 페이지를 보호해야합니다. 말이된다?
HttpOnly
쿠키를 설정할 때 서버에서 플래그를 설정할 수 있습니다. 이는 Javascript가 쿠키를 볼 수 없음을 의미합니다. 그러나 쿠키 는 여전히 AJAX 및 일반 페이지 요청에 대해 전송되며 계속 동일하게 작동합니다. Javascript는에서 볼 수 없습니다document.cookie
.