Prüfen ob eine bestimmte Webseite im Zugriff ist

Twinsetter

Erfahrenes Mitglied
Ich habe eine Webseite erstellt auf der das Standbild von meiner Webcam dargestellt wird. Die Seite wird mit PHP erzeugt und automatisch alle 5s aktualisiert. Die Aktualisierung der Seite erfolgt per Java-Script.
Die Kamera kann gedreht und gekippt werden. Hierfür sind auf der Webseite entsprechende Buttons vorhanden, so daß diese Funktion vom Betrachter der Seite gesteuert werden kann.

Jetzt zum eigentlichen Problem :
Wenn jetzt mehrere User gleichzeitig auf die Webpage zugreifen, dann wäre das Chaos perfekt, weil jeder die Kamera steuern könnte. Ich möchte deshalb, wenn ein User auf dieser Seite zu Gange ist, daß der Zugriff von weiteren Usern auf diese Seite geblockt wird und sie auf eine Seite mit einem Hinweis umgeleitet werden. Denkbar wäre auch, daß bei den zusätzlichen Usern die Steuerelemente deaktiviert werden.
Zur Realisierung dieser Funktion müßte ich prüfen, ob ein User gerade diese Webseite besucht. Alle weiteren Requests für diese Seite müßte ich dann blocken.
Die ganze Sache müßte wahrscheinlich über PHP oder CGI laufen, da dies ja serverseitig ablaufen muß. Habe schon intensivst gegoogelt aber bisher noch keine passende Lösung gefunden. Hatte schon daran gedacht die Log's des Webservers auszuwerten, aber das bringt nichts, da dort nur der erstmalige Zugriff auf die Seite geloggt wird.

Hat vielleicht jemand eine Idee wie man das lösen könnte ? Vielleicht geht's über Sessions bzw. Cookies.

Bin für jeden Hinweis dankbar!

Gruß Twinsetter

PS: Hoffe das dies das richtige Forum für meine Frage ist
 
Hi

Von PHP aus bestimmen, ob ein User gerade jetzt auf der Seite ist,
ist nicht möglich, aber hier auch nicht wirklich nötig.

Grober Überblick:
Die folgende Methode funktioniert so, dass eben nur ein Besucher gleichzeitig
die Steuerung bedienen kann. Wenn der die Seite zumacht bekommt einer der Anderen
die Steuermöglichkeit (zufällige Auswahl).
Nachteil: Leute, die JS ausgeschaltet haben, sind von der Steuerung komplett ausgeschlossen
(aber die haben sowieso mit der Aktualisierung schon Probleme).
Korrektur: Nachteil stimmt nicht. Hab zu wenig nachgedacht.

Alternativen wären Javaapplets etc., aber das wäre Kanonen-auf-Spatzen
Gebraucht wird serverseitig: PHP und eine Datenbank
(Sessions sind für jeden User extra, geht nicht. Dateien sind nicht threadsafe.)

So, ich schreib zu den Details gleich weiter, verschieb das aber zuerst noch nach PHP.
Ist ja doch eher programmiermäßig...
 
Zuletzt bearbeitet:
Danke für die erste schnelle Antwort. Deiner Antwort entnehme ich, daß es möglich sein müßte.

Mit dem Javascript hast du recht, aber man kann ja auch abprüfen, ob beim User JS funktioniert - wenn nicht kann man einen Hinweis ausgeben oder aber auch auf eine passende Seite umleiten. Sowas habe ich schon mal gemacht, muß es nur wieder rauskramen

Gruß Twinsetter
 
Falls noch nicht gesehen, oben ist was (rot) ausgebessert.
Nicht-JS-User sind doch nicht ausgeschlossen.

Annahme: Die Seite wird alle 5 Sekunden komplett aktualisiert, kein Ajax oder so.

//Nachtrag:
...Mein Text klingt so kompliziert. Liegt wohl an der Uhrzeit :D
Ich kenn deinen Wissensstand nicht...ob dir alles klar ist oder du kein Wort verstehst...
Wenn bei der Umsetzung der einzelnen Punkte Fragen sind, einfach fragen.
Wenn man alles in einem Post detailliert machen würde, wirds unübersichtlich.
//Nachtrag Ende


Schritt 1:
Eine DB-Tabelle erstellen (die eigentlich nur eine Zeile braucht...egal)

Spalten: Ein String (zB. varchar(64)) und ein Timestamp

Wie gesagt, eine Zeile rein. Startwerte Leer und 0 oder so.

Schritt 2:
PHP-Datei abändern
Wenn (nur wenn) sie wegen einem Steuerbutton aufgerufen wurde
(statt einer Zeitaktualisierung):

Einen (neuen) GET/POST-Parameter ("hash" oder so) auswerten,
ob er gleich wie der DB-String ist, und im gleichen Zug
gleich den Timestamp auf die aktuelle Zeit setzen
update ... where ...

Wenn affected_rows 0 ist, Kamera nicht steuern, Bild ohne Buttons ausgeben.

Sonst: Steuern, Bild und Buttons rausschicken

Besonderheit bei den Buttons: Einen (neuen) hash als Parameter in der Uri mitgeben.
Diesen Hash auch in die DB schreiben.
Berechnen kann man zB. einen mit sha1 aus IP+Zeit oder so...

Schritt 3:
PHP-Datei weiter abändern
Jetzt für den Fall, dass es eine Zeitaktualisierung war:
Den DB-Timestamp auf die aktuelle Zeit setzen, wenn er älter als 5 Sekunden war.

Wenn affected_row 0 ist: Bild ohne Buttons rausgeben.

Sonst: Wie oben Buttons mit GET-Hash raus, und diesen in die DB schreiben.

Gruß
 
Hallo!

Danke für Deine schnelle Antwort.
Die Idee mit dem zusätzlichen Hash und dem Timstamp ist es! Warum bin ich da nicht selbst drauf gekommen? Aber manchmal denkt man einfach in die falsche Richtung.

Ich werde es folgendermaßen machen:
Die Seite mit der(n) Kamera(s) wird über eine zusätzliche vorhandene Startseite aufgerufen. Klickt ein authorisierter User -die dürfen die Kamera steuern - auf den Link zur Kameraseite, wird die Seite mit Steuerelementen ansonsten ohne angezeigt.Diese Unterscheidung ist für mich wichtig, da durch das Schwenken zum einen private Bilder ins Netz gelangen könnten und zum anderen auch Bilder dargestellt werden könnten, die ich ich aus Datenschutzgründen nicht ins Netz stellen darf (z.B. Ansichten vom Nachbarhaus). Die Grundstellung der einen Kamera ist unverfänglich und darf ins Netz.
Sobald die Kameraseite aktiv wird werde ich mit dem Abruf des Standbildes durch einen zusätzlichen Hash eine Datei erzeugen in die ich eine ID (Art des Aufrufes oder so ähnlich) und z.B. die IP des aufrufenden Hosts(wozu das gut sein soll erkläre ich noch) schreibe. Die Datei wird nun mit jedem Abruf des Standbildes (alle 5s) neu geschrieben. Wird die Seite durch einen authorisierten Benutzer aufgerufen, dann steht ID=1 drin, ansonsten ID=0. Geht jetzt einer auf die Seite wird das Vorhandensein der Datei geprüft. Ist sie vorhanden wird sie ausgelesen. Steht eine 0 drin wird der User auf die Seite mit dem Kamerabild ohne Steuerelemente geleitet. Steht 1 drin wird der Request generell abgewiesen und der User wird auf eine Seite mit einer kurzen Information weitergeleitet. Die könnte z.B. das letze Standbild enthalten, das jeder sehen darf.
Ist die Datei gar nicht vorhanden wird anhand des Users (eine Userverwaltung gibt es bereits auf dem Server) entschieden auf welche Kameraseite verlinkt wird.
Da der Server bei mir im Keller steht ist es kein Problem ein kleines Shellscript darauf zu installieren, welches das Vorhandensein und das Alter der Datei prüft. Ist sie älter als 5s plus eine kleine Sicherheitszeitspanne, dann wird sie gelöscht und die Kamera in die Standardposition gedreht. Andernfalls wird die Zeit geprüft wie lange der authorisierte User - als der der die Cam steuern darf - mit IP x eingeloggt ist Wird hier eine bestimmte Zeit überschritten erfolgt eine Zwangstrennung.

Danke noch mal für Deine Hinweise. Wie gesagt das mit dem zusätzlichen Hash und dem Zeitstempel war's.
Ich werde es heute Abend in die Tat umsetzen. Jetz muß ich erst mal noch am Haus und im Garten tun, sonst gibt es Ärger mit meiner Regierung.


Gruß Twinsetter

PS: Wie ich am Zeitstempel Deines Posts sehe, bist Du auch Nachtarbeiter. Sind wahrscheinlich die Programmierer, da dann die Vögel nicht mehr so laut brüllen.
 
Zurück