• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Doppelten Zugriff verhindern

blabla333

Mitglied
Ich habe ein kleines Script, welches in einem Intranet betrieben wird. Mit diesem wird der Inhalt einer SQL-DB in Input-Feldern angezeigt. Entsprechend können die Daten auch verändert werden.
Nun ist es aber so, dass von mehreren Rechnern auf die gleichen Daten zugegriffen werden kann. Dadurch kann es natürlich zu Problemen kommen.
Deshalb möchte ich es irgendwie einrichten, dass nur ein Nutzer eine Seite mit ihren Daten aufrufen kann. In diesem Moment kann kein anderer Nutzer die gleiche Seite öffnen.
Das Script ist frei im Intranet verfügbar, so dass Logins ausscheiden.

Bin für jede Idee dankbar!
 
Werbung:
Du könntest beim ersten Aufruf der Seite in einer Datenbank einen entsprechende Sperrvermerk setzen. Bei jedem Aufruf der Seite prüfst Du erst, ob der Sperrvermerk gesetzt ist und lässt die Anzeige bzw. die Bearbeitung nicht zu. Da Du, d.h., der Server aber nicht mitkriegen kann, wann der aktuelle User mit seiner Bearbeitung fertig ist (z.B. weil er einfach den Browser geschlossen hat) müsstest Du eine Art Timeout einbauen, so dass der Zugriff irgendwann wieder automatisch freigegeben wird. Wenn diese automatische Freigabe aber passiert, während der aktive User die Daten noch in seinem Browser bearbeitet (möglicherweise ist er nur langsam), kann dies auch schlecht sein.
Alles in allem müsstest Du Dir überlegen, ob so eine Sperre wirklich sinnvoll ist oder es z.B. nicht sinnvoller ist, vor dem Abschicken der Daten zu prüfen, ob es zwischenzeitlich eine Änderung gab und das dann dem user mitteilen bzw. dann seine Änderungen zu verwerfen o.ä.

HTH
Alex
 
Hallo,

das mit dem Sperrvermerk kann man natürlich auch per ajax machen, das zb alle 10sekunden ein info an eine DB geschickt wird wo der User sich gerade befindent, is das eine Eingabemaske kommt halt die maskentyp und die id des datensatzes in die DB zb: grunddaten2085 oder rechnung8641.
Ist der User auf einer liste oder wo es egal ist wird der eintrag in der DB einfach gelöscht, zusätzlich natürlich ein time mit vielleicht 20min je nach dem, um das zu vermeiden was @hfb schon meinte, fenster zu und gut.

Jetzt brauchst beim öffnen nur noch prüfen user geht auf grunddaten mit id 2085 ist da schon einer wenn nein, ok, wenn doch halt time noch prüfen und wenn die unter 10min ist, nichts anzeigen mit der Info das User XYZ gerade das bearbeitet.

Cheffchen
 
Werbung:
Und wie kann ich die User bzw. den jeweiligen Rechner überhaupt identifzieren bzw. unterscheiden? Das mit dem Sperrvermerk verstehe ich ja, aber die User sind ja wie gesagt nicht eingeloggt oder so, es gibt also keinen Usernamen. Vielmehr muss ich erkennen, welcher Rechner aus dem Intranet gerade die Seite aufruft.
Das Erkennen, ob der User auch fertig ist, wäre in meinem Fall kein Problem, da der User nach dem Bearbeiten das Formular abschicken MUSS. Macht er das nicht, so ist die Seite eben gesperrt. Dei einzige Ausnahme ist wohl, dass der User selbst die Bearbeitung abbricht und den Browser einfach schließt. Da weiß ich noch nicht genau, wie ich das erkennen kann. Vielleicht geht das ja per JavaScript / AJAX...
 
Hallo,

dann vielleicht über IP und wenn das nicht gehen sollte dann vielleicht über ein keks was ja auch super über php geht.
Ist einer auf der Seite wird ein Kekes erstellt mit microtime und zufallszahl und dann wird halt das als Benutzername genommen.

Das mit dem Schließen hatten ich doch schon geschrieben, das time mit ort speicherst und wenn der unterschiet zb über 10min ist wird das einfach gelöscht weil user Broser zu gemacht hat oder eingeschlafen.

man kann das natürlich auch anders machen das User in 10min speichern muss sonst wird nichts mehr gesendet als doppelte absicherung mit ein counter in der ecke, aber die prüfung ist natürlich per php das man das nicht verändern kann :O).

An dem Thema kann man ein ganzen tag rum machen.

Cheffchen
 
Zurück
Oben