php session read-write lock
Let’s look at an example first, function:
1. Click a button on the page, ajax executes php, and session is used in php to record the execution step.
2. Use ajax to poll another php, obtain the data in the session, and output the execution step.
session.html Call php to execute and output the execution steps
<!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 Execute and record the execution step
<?php session_start(); $_SESSION['step'] = ''; $n = 1; while($n<=10){ $_SESSION['step'] = $n; sleep(1); $n++; } $_SESSION['step'] = 'complete'; ?>
##getstep.php Get the execution step
<?php session_start(); echo isset($_SESSION['step'])? $_SESSION['step'] : ''; ?>
When executed, it was found that instead of returning at every step, complete was returned directly after waiting for 10 seconds.
After executing session_start(), the session will be locked. Until the page execution is completed.
Therefore, during the execution of the page, writing to the session will only be saved in the memory and will not be written to the session file.
#To read the session, you need to wait until the session lock is unlocked before it can be read.
We can use session_write_close() to write data to the session file and end the session process. In this way, there is no need to wait for the page execution to complete, and you can also get the execution step.
But there is a problem with this, that is, after executing session_write_close(), any write operation to the session will not work. Because the session process has ended.
Therefore, when you need to write a session again, add session_start() in front
session_start — Start new or resume existing session
##session_write_close — Write session data and end session
handle.php Click the following modifications to get the execution step Related recommendations: The above is the detailed content of Related content about php session read-write lock. For more information, please follow other related articles on the PHP Chinese website!<?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';
?>