Home  >  Article  >  Backend Development  >  Related content about php session read-write lock

Related content about php session read-write lock

jacklove
jackloveOriginal
2018-06-09 11:51:332059browse

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){
                    $(&#39;#result&#39;).html(&#39;当前执行:&#39; + data + &#39;<br>&#39;);
                    if(data==&#39;complete&#39;){
                        clearInterval(et);
                    }
                }
            );
        },500);
    }
  </script>
 </body>
</html>


handle.php Execute and record the execution step

<?php
session_start();
$_SESSION[&#39;step&#39;] = &#39;&#39;;
$n = 1;
while($n<=10){
    $_SESSION[&#39;step&#39;] = $n;
    sleep(1);
    $n++;
}
$_SESSION[&#39;step&#39;] = &#39;complete&#39;;
?>


##getstep.php Get the execution step

<?php
session_start();
echo isset($_SESSION[&#39;step&#39;])? $_SESSION[&#39;step&#39;] : &#39;&#39;;
?>


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

<?php
session_start();
$_SESSION[&#39;step&#39;] = &#39;&#39;;
$n = 1;
while($n<=10){
    $_SESSION[&#39;step&#39;] = $n;
    session_write_close(); // 将数据写入session文件,并结束session进程
    session_start();       // 重新创建session进程
    sleep(1);
    $n++;
}
$_SESSION[&#39;step&#39;] = &#39;complete&#39;;
?>
This article explains the content about php session read-write lock. For more related information, please Follow php Chinese website.

Related recommendations:

Use PHP to optimize the number of narcissus


How to verify the ID number through PHP


How to get YouTube video information through php

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn