php的session讀寫鎖例子

來源:互聯網
上載者:User

先看一個例子,功能:

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 執行並記錄執行到第幾步

<?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秒後直接返回complete。

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/

當執行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['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.