Heim  >  Artikel  >  Backend-Entwicklung  >  Verwandte Inhalte zur Lese-/Schreibsperre für PHP-Sitzungen

Verwandte Inhalte zur Lese-/Schreibsperre für PHP-Sitzungen

jacklove
jackloveOriginal
2018-06-09 11:51:332060Durchsuche

Lese-/Schreibsperre für PHP-Sitzung

Schauen wir uns zunächst ein Beispiel an, die Funktion:

1. Klicken Sie auf eine Schaltfläche auf der Seite, Ajax führt PHP aus und die Sitzung wird in PHP verwendet, um den Ausführungsschritt aufzuzeichnen.

2. Verwenden Sie Ajax, um ein anderes PHP abzufragen, die Daten in der Sitzung abzurufen und den Ausführungsschritt auszugeben.

session.html Rufen Sie PHP auf, um den Ausführungsschritt

<!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 auszuführen und auszugeben .php Ausführungsschritt ausführen und aufzeichnen

<?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 Ausführungsschritt abrufen

<?php
session_start();
echo isset($_SESSION[&#39;step&#39;])? $_SESSION[&#39;step&#39;] : &#39;&#39;;
?>


Bei der Ausführung wurde festgestellt, dass anstelle der Rückgabe bei jedem Schritt direkt nach einer Wartezeit von 10 Sekunden „Complete“ zurückgegeben wurde.

Nach der Ausführung von session_start() wird die Sitzung gesperrt. Bis die Seitenausführung abgeschlossen ist.

Daher wird das Schreiben in die Sitzung während der Ausführung der Seite nur im Speicher gespeichert und nicht in die Sitzungsdatei geschrieben.

Um die Sitzung zu lesen, müssen Sie warten, bis die Sitzungssperre entsperrt ist, bevor sie gelesen werden kann.

Wir können session_write_close() verwenden, um Daten in die Sitzungsdatei zu schreiben und den Sitzungsprozess zu beenden. Auf diese Weise müssen Sie nicht warten, bis die Seitenausführung abgeschlossen ist, und Sie können auch den Ausführungsschritt erhalten.

Dabei gibt es jedoch ein Problem, das heißt, nach der Ausführung von session_write_close() funktioniert kein Schreibvorgang in die Sitzung. Weil der Sitzungsprozess beendet ist.

Wenn Sie also eine Sitzung erneut schreiben müssen, fügen Sie session_start() davor hinzu

session_start – Neue Sitzung starten oder bestehende Sitzung fortsetzen

session_write_close – Sitzungsdaten schreiben und Sitzung beenden

handle.php Klicken Sie auf die folgenden Änderungen, um den Ausführungsschritt zu erhalten

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

In diesem Artikel wird die Lese-/Schreibsperre für PHP-Sitzungen erläutert Inhalt, bitte folgen Sie der chinesischen PHP-Website.

Verwandte Empfehlungen:

Verwenden Sie PHP, um die Anzahl der Narzissen zu optimieren

So überprüfen Sie die ID-Nummer über PHP

So erhalten Sie YouTube-Videoinformationen über PHP

Das obige ist der detaillierte Inhalt vonVerwandte Inhalte zur Lese-/Schreibsperre für PHP-Sitzungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn