• 技术文章 >后端开发 >php教程

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

    jacklovejacklove2018-06-09 11:51:33原创775
    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()">
      <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中文网。

    相关推荐:

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

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

    如何通过php 来获取YouTube视频信息

    以上就是关于php session 读写锁的相关内容的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php session
    上一篇:利用ThinkPHP实现ajax仿官网搜索的功能 下一篇:关于php JSON数据格式化的方法
    线上培训班

    相关文章推荐

    • 你知道这个PHP命令行选项解析库(pflag)吗?• 带你看懂PHP中的class定义类与成员属性方法• PHP中如何才能将时间日期格式化?怎么计算时间差?• 一定搞得懂PHP中如何添加图片水印• 最详细的教你PHP时间戳与日期时间的转换

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网