Hello,
http://de.php.net/manual/de/function.session-write-close.php
Bekommen Session-Daten wirklich nur eine Schreibsperre oder auch eine Lesesperre?
Falls sie nur eine Schreibsperre bekommen: Kann man aus dem script heraus feststellen, ob (k)eine Schreibsperre besteht oder "muß" man prophylaktisch was in die Session schreiben, damit man erst danach was lesen kann, weil man die Schreibrechte bekommen hat und durch den Schreibvorgang andere Zugriffe eine Schreibsperre haben?
Session-Daten bekommen ein advisory LOCK_EX, das solange aufrechterhalten wird, bis das Script beendet wird (genau, bis es seine Sessiondaten geschrieben hat).
Du kannst also ein fopen() auf die Sessiondatei ausüben, nur kein flock(), egal ob mit LOCK_SH oder LOCK_EX. Das bedeutet also, dass Du das aus einem anderen Script nur sinnvoll testen kannst, wenn Du
$fh = fopen('frenmde_Sessiondatei', r+);
if ($fh)
{
$lock = flock($fh, LOCK_EX | LOCK_NB, $wouldblock ))
}
if ($lock)
{
## Arbeitsschritte durchführen
}
else
{
## Fehlerbehandlung
]
fclose($fh);
oder auch mit LOCK_SH, wenn Du selber nicht schreiben willst, auch nicht später!
Denke daran, dass der Lesevorgang für die sofort anschließende Datenveränderung immer innerhalb des gemeinsamen LOCK_EX stattfinden darf. Ggf. musst Du nochmal lesen, wenn Du vorher schon für rein informative Zwecke unter LOCK_SH gelesen hast.
Wenn Du mit Session_write_close() die Sesseiondatei schließt, gilt das ebenfalls sinngemäß.
Solltest Du die Sessiondatei nochmals wieder öffen wollen zur Benutzung, muss das Session-Array neu aufgebaut werden innerhalb des LOCK_EX, denn es könnte ja ein erlauchter Vorgesetztenprozess in der Zwischenzeit in die Sessiondatei hineingeschrieben haben, warum auch immer ...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg