Hallo Felix,
das Minus ist nicht von mir - aber genau sowas führt doch zu den Browserabfrage ob die Daten erneut gesendet werden sollen. Und das möchte encoder nicht.
Die korrekte Methode ist eigentlich eine einmalige Passwortabfrage, deren Ergebnis in der Session gespeichert wird. Ein Ajax-Request ist meines Wissens ebenfalls mit dem Session-Cookie unterwegs, so dass ein von Ajax gesetztes Session-Flag im nächsten regulären PHP Request ankommen sollte.
Wenn keine Session erwünscht ist, wäre ein anderer Weg, den ich mir noch vorstellen könnte, ein spezieller Login-Cookie. In dem ist ein Wert drin, der von der Session-ID und einem längeren geheimen Wert auf dem Server abgeleitet ist. Geheimwert und Session-ID werden zusammengeworfen und mit password_hash verschlüsselt (was ein Zusatz-Salz einwirft). Das Ergebnis kommt in den Login-Cookie. Wenn der Server bei Seitenabrufen einen Login-Cookie findet, nimmt er den Geheimwert, die Session-ID und den Login-Cookie und macht damit den password_verify.
Zur Steigerung der Sicherheit könnte man den Geheimwert auf dem Server noch täglich wechseln. Das kann man beliebig kompliziert gestalten.
D.h. solange der serverseitige Geheimcode und die Session-ID des Users gleich bleiben, bleibt auch der Login-Cookie gültig. Ich bin aber kein Sicherheitsexperte und kann nicht sagen, ob ich hier Schlangenöl verkaufe. Ein Problem dieser Idee ist vor allem, dass man pro Seitenabruf einen password_verify aufrufen muss, und diese Funktion ist ja vorsätzliche langsam. Eine Session ist besser.
Rolf
sumpsi - posui - clusi