php 세션 읽기-쓰기 잠금
예제를 먼저 살펴보겠습니다. 기능:
1 페이지에서 버튼을 클릭하면 ajax가 php를 실행하고 세션은 php에서 어떤 단계를 기록하는 데 사용됩니다. 실행의.
2. ajax를 사용하여 다른 PHP를 폴링하고 세션에서 데이터를 얻은 다음 실행 단계를 출력합니다.
session.html php를 호출하여 실행 단계를
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title> session lock </title> </head> <body> <input type="button" value="handle" onclick="handle()"> <p id="result"></p> <script type="text/javascript"> function handle(){ $.get("handle.php"); // 执行handle // 每500毫秒请求,获取执行到第几步 var et = setInterval(function(){ $.get("getstep.php", function(data){ $('#result').html('当前执行:' + data + '<br>'); if(data=='complete'){ clearInterval(et); } } ); },500); } </script> </body> </html>
handle.php에 실행하고 출력합니다. 실행 단계를
<?php session_start(); $_SESSION['step'] = ''; $n = 1; while($n<=10){ $_SESSION['step'] = $n; sleep(1); $n++; } $_SESSION['step'] = 'complete'; ?>
getstep.php에 기록하고
<?php session_start(); echo isset($_SESSION['step'])? $_SESSION['step'] : ''; ?>
의 실행 단계 실행 시 매 단계마다 반환되지 않고 10초 대기 후 바로 완료가 반환되는 것으로 확인되었습니다.
session_start()가 실행되면 세션이 잠깁니다. 페이지 실행이 완료될 때까지.
따라서 페이지 실행 중에 세션에 쓴 내용은 메모리에만 저장되고 세션 파일에는 기록되지 않습니다.
세션을 읽으려면 세션 잠금이 해제될 때까지 기다려야 읽을 수 있습니다.
session_write_close()를 사용하여 세션 파일에 데이터를 쓰고 세션 프로세스를 종료할 수 있습니다. 이런 방식으로 페이지 실행이 완료될 때까지 기다릴 필요가 없으며 실행 단계도 얻을 수 있습니다.
하지만 여기에는 문제가 있습니다. 즉, session_write_close()를 실행한 후에는 세션에 대한 모든 쓰기 작업이 작동하지 않습니다. 세션 프로세스가 종료되었기 때문입니다.
그래서 세션을 다시 작성해야 할 때는 앞의 세션 데이터에 session_start()를 추가하고 세션을 종료하세요.
handle.php 실행 단계를 얻으려면 다음 수정 사항을 클릭하세요 관련 권장 사항: PHP를 사용하여 수선화 수를 최적화하세요 php를 통해 ID 번호를 확인하는 방법 위 내용은 PHP 세션 읽기-쓰기 잠금 관련 내용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!<?php
session_start();
$_SESSION['step'] = '';
$n = 1;
while($n<=10){
$_SESSION['step'] = $n;
session_write_close(); // 将数据写入session文件,并结束session进程
session_start(); // 重新创建session进程
sleep(1);
$n++;
}
$_SESSION['step'] = 'complete';
?>