php session 讀寫鎖

來源:互聯網
上載者:User

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()">  <div id="result"></div>  <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 執行並記錄執行到第幾步

<?phpsession_start();$_SESSION['step'] = '';$n = 1;while($n<=10){    $_SESSION['step'] = $n;    sleep(1);    $n++;}$_SESSION['step'] = 'complete';?>

getstep.php 擷取執行到第幾步

<?phpsession_start();echo isset($_SESSION['step'])? $_SESSION['step'] : '';?>

執行時發現,並不是每一步返回,而是等待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 按以下修改,就能擷取到執行到哪一步

<?phpsession_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';?>


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.