关于php session 读写锁的相关内容
Jun 09, 2018 am 11:51 AMphp 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){ $('#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。
当执行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'; ?>
本文讲解了关于php session 读写锁的内容 ,更多相关内容请关注php中文网。
相关推荐:
Atas ialah kandungan terperinci 关于php session 读写锁的相关内容. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
