• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于php session 读写锁的相关内容

php 搞代码 3年前 (2022-01-22) 42次浏览 已收录 0个评论

ph本@文来源gao($daima.com搞@代@#码(网5搞gaodaima代码p 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 执行并记录执行到第几步

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

本文讲解了关于php session 读写锁的内容 ,更多相关内容请随时关注我们网站!

相关推荐:

利用php 来求水仙花数的优化

如何通过php来验证身份证号码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于php session 读写锁的相关内容
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址