PHPセッションの読み取り/書き込みロックに関する関連コンテンツ

jacklove
リリース: 2023-03-31 08:46:01
オリジナル
2079 人が閲覧しました

#php セッション読み取り/書き込みロック

まず関数の例を見てみましょう:

#1. ページ上のボタンをクリックすると、ajax が php を実行し、php でセッションが実行ステップを記録します。

2. ajax を使用して別の PHP をポーリングし、セッション内のデータを取得し、実行ステップを出力します。

#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){
                    $(&#39;#result&#39;).html(&#39;当前执行:&#39; + data + &#39;<br>&#39;);
                    if(data==&#39;complete&#39;){
                        clearInterval(et);
                    }
                }
            );
        },500);
    }
  </script>
 </body>
</html>
ログイン後にコピー

handle .php

実行して実行ステップを記録します

<?php
session_start();
$_SESSION[&#39;step&#39;] = &#39;&#39;;
$n = 1;
while($n<=10){
    $_SESSION[&#39;step&#39;] = $n;
    sleep(1);
    $n++;
}
$_SESSION[&#39;step&#39;] = &#39;complete&#39;;
?>
ログイン後にコピー
##getstep.php

実行ステップを取得します


<?php
session_start();
echo isset($_SESSION[&#39;step&#39;])? $_SESSION[&#39;step&#39;] : &#39;&#39;;
?>
ログイン後にコピー
実行すると、ステップごとに返されるのではなく、10 秒待った後に直接 complete が返されることがわかりました。


session_start() を実行すると、セッションがロックされます。ページの実行が完了するまで。

したがって、ページの実行中、セッションへの書き込みはメモリに保存されるだけであり、セッション ファイルには書き込まれません。

#セッションを読み取るには、セッションのロックが解除されるまで待つ必要があります。

session_write_close() を使用して、セッション ファイルにデータを書き込み、セッション プロセスを終了できます。このようにすると、ページの実行が完了するまで待つ必要がなく、実行ステップも取得できます。

しかし、これには問題があります。つまり、session_write_close() を実行した後は、セッションへの書き込み操作が機能しなくなります。セッションプロセスが終了したためです。

したがって、セッションを再度記述する必要がある場合は、前に session_start() を追加します。

session_start

— 新しいセッションを開始するか、既存のセッションを再開します ##session_write_close

— セッション データを書き込み、セッションを終了します

#handle.php 次の変更をクリックして実行ステップを取得します。 #

<?php
session_start();
$_SESSION[&#39;step&#39;] = &#39;&#39;;
$n = 1;
while($n<=10){
    $_SESSION[&#39;step&#39;] = $n;
    session_write_close(); // 将数据写入session文件,并结束session进程
    session_start();       // 重新创建session进程
    sleep(1);
    $n++;
}
$_SESSION[&#39;step&#39;] = &#39;complete&#39;;
?>
ログイン後にコピー
この記事では、php セッションの読み取り/書き込みロックの内容について説明します。 php中国語ウェブサイトに従ってください。

関連する推奨事項: PHP を使用して水仙の数を最適化する

PHP で ID 番号を確認する方法

#php を通じて YouTube 動画情報を取得する方法

##

以上がPHPセッションの読み取り/書き込みロックに関する関連コンテンツの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート