關於php session 讀寫鎖定的相關內容

jacklove
發布: 2023-03-31 08:46:01
原創
2079 人瀏覽過

php session 讀寫鎖定

#先看一個例子,功能:

##1.點選頁面中一個按鈕,ajax執行php,php中用session記錄執行到哪一步。

2.使用ajax輪詢另一個php,取得session中數據,輸出執行到哪一步。

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


handle.php 執行並記錄執行到第幾步

<?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 取得執行到第幾步#

<?php
session_start();
echo isset($_SESSION[&#39;step&#39;])? $_SESSION[&#39;step&#39;] : &#39;&#39;;
?>
登入後複製


執行時發現,並不是每一步返回,而是等待10秒後直接返回complete。

當執行session_start()後,session會被鎖定。直到頁面執行完成。

因此在頁面執行其間,對sesssion進行寫入操作,只會保存在記憶體中,並不會寫入session檔案。

而對session進行讀取,則需要等待,直到session鎖定解開才能讀取。

我們可以使用session_write_close()把資料寫入session檔案並結束session進程。這樣就不需要等待頁面執行完成,也能取得到執行到哪一步。

但這樣有個問題,就是執行完sesssion_write_close()後,對session的任何寫入操作都不起作用。因為session進程已經結束。

因此需要再寫session時,在前面加上session_start()

session_start  #— Start new or resume existing session 

session_write_close — Write session data and end session 

handle.php 按以下修改,就能取得到執行到哪一步

<?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;;
?>
登入後複製

本文講解了關於php session 讀寫鎖的內容,更多相關內容請關注php中文網。

相關推薦:

利用php 求水仙花數的最佳化

如何透過php來驗證身分證號碼

如何透過php 來取得YouTube影片資訊
#

以上是關於php session 讀寫鎖定的相關內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板