php读写锁,php session 读写锁

php session 读写锁

先看一个例子,功能:

1.点击页面中一个按钮,ajax执行php,php中用session记录执行到哪一步。

2.使用ajax轮询另一个php,获取session中数据,输出执行到哪一步。

session.html 调用php执行,并输出执行到第几步

session lock

function handle(){

$.get("handle.php"); // 执行handle

// 每500毫秒请求,获取执行到第几步

var et = setInterval(function(){

$.get("getstep.php",

function(data){

$('#result').html('当前执行:' + data + '
');

if(data=='complete'){

clearInterval(et);

}

}

);

},500);

}

handle.php 执行并记录执行到第几步

session_start();

$_SESSION['step'] = '';

$n = 1;

while($n<=10){

$_SESSION['step'] = $n;

sleep(1);

$n++;

}

$_SESSION['step'] = 'complete';

?>

getstep.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 按以下修改,就能获取到执行到哪一步

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

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值