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){ $('#result').html('当前执行:' + data + '<br>'); if(data=='complete'){ clearInterval(et); } } ); },500); } </script> </body> </html>
handle auszuführen und auszugeben .php Ausführungsschritt ausführen und aufzeichnen
<?php session_start(); $_SESSION['step'] = ''; $n = 1; while($n<=10){ $_SESSION['step'] = $n; sleep(1); $n++; } $_SESSION['step'] = 'complete'; ?>
getstep.php Ausführungsschritt abrufen
<?php session_start(); echo isset($_SESSION['step'])? $_SESSION['step'] : ''; ?>
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['step'] = ''; $n = 1; while($n<=10){ $_SESSION['step'] = $n; session_write_close(); // 将数据写入session文件,并结束session进程 session_start(); // 重新创建session进程 sleep(1); $n++; } $_SESSION['step'] = 'complete'; ?>
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!