내 AJAX 요청이 PHP에서 서로를 차단하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-26 16:59:30
원래의
221명이 탐색했습니다.

Why Do My AJAX Requests Block Each Other in PHP?

동시 AJAX 요청이 서로 차단

특정 상황에서는 AJAX 요청이 동시에 실행되지 않아 예기치 않은 동작이 발생할 수 있습니다. 이 문제는 데이터를 XSLX 파일로 내보내는 동안 진행 상황을 표시하도록 설계된 두 개의 동시 AJAX 요청에 문제가 발생했을 때 발생했습니다. 첫 번째 요청은 긴 PHP 스크립트를 트리거하고 두 번째 요청은 정기적으로 진행률 업데이트를 확인합니다.

조사 결과 두 번째 AJAX 요청은 실행되기 전에 첫 번째 AJAX 요청이 완료되기를 기다리고 있는 것으로 나타났습니다. 이 동작은 PHP의 세션 차단으로 인해 발생합니다.

PHP의 세션 차단

기본적으로 PHP는 파일을 사용하여 세션 데이터를 저장합니다. 세션이 시작되면(session_start() 함수 사용), PHP는 쓰기를 위해 세션 파일을 열고 독점 액세스를 보장하기 위해 잠급니다. 이 잠금 메커니즘은 동시 요청이 동시에 파일에 액세스하는 것을 방지합니다. 결과적으로 두 번째 AJAX 요청은 실행되기 전에 첫 번째 AJAX 요청이 완료되고 세션 파일이 잠금 해제될 때까지 기다려야 했습니다.

해결책

이에 대한 해결책 문제는 PHP의 기본 파일 기반 세션 저장소를 비활성화하거나 세션 파일에 쓴 후 명시적으로 세션 파일을 닫고 잠금을 해제하는 것입니다.

파일 기반 세션 저장소를 비활성화하려면 php.ini에 다음 줄을 추가하세요. file:

session.save_path =
로그인 후 복사

세션 파일을 명시적으로 닫으려면 session_write_close() 함수를 사용하세요.

<code class="php"><?php
    session_start();

    $_SESSION['foo'] = 'bar'; // Write data to the session

    session_write_close(); // Close the session file

    echo $_SESSION['foo']; // You can still read from the session.
?></code>
로그인 후 복사

이러한 솔루션을 구현하면 두 번째 AJAX 요청이 동시에 실행되도록 할 수 있습니다. 지연 없이 진행 상황을 추적할 수 있습니다.

위 내용은 내 AJAX 요청이 PHP에서 서로를 차단하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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