Userlimit

PC-Freak

Grünschnabel
Hi leute,

ich habe mal wieder eine Frage und zwar wenn jemand auf einer Seite zugreift solange der die Seite nicht geschlossen hat kann niemand anders drauf zugreifen. Als bsp. wenn ich diesen Thread offen habe und solange ich da drin bin dann kann keiner die Seite öffnen sobald ich aber die Seite verlassen habe kann wieder jemand eintreten. Also eigentlich so eine Art Userlimit.
 
Dazu müsstest du dann wohl den User der gerade auf der Seite ist in einer Datenbank mit Datum und Uhrzeit speichern.

Immer wenn die Seite aufgerufen wird, wird geprüft ob es einen Eintrag gibt bei dem die Uhrzeit noch nicht älter als (?) 5 Minuten ist, sonst wird er gelöscht und die Seite ist freigegeben. Ist der Eintrag noch aktuell, ist die Seite für weitere Zugriffe gesperrt.

Bei jedem "Klick" den der User macht der gerade auf der Seite ist, wird die Zeit aktualisiert.

Ob das allerdings der Datenbank gut tut ?
 
Wenn ich das jetzt richtig verstanden hatte sollte es u.A. so zu realisieren sein.
In deiner Datenbank legst du für die Seite welche du sperren willst einen Eintrag an der isInUse o.Ä benannt ist.

im php Dokument frägst du das ganze in etwa so ab:

PHP:
$inUse = fetchSiteState("Seitenname");
if ($inUse == false) {
setSiteState("Seitenname",true);
//Restliche Seite ausgeben
}
else
{
echo "Seite ist derzeit in Benutzung";
}

die beiden Funktionen dienen dazu zum einen in der SQL Datenbank abzufragen ob die Seite in Benutzung ist (fetchSiteState), bzw. den Status auf in Benutzung zu setzen(setSiteState).

Die Funktionen musst du natürlich selbst schreiben, sollte aber eigentlich nicht schwer sein.

Liebe Grüße
NoUse4aNick
 
Du kannst das ganze auch in ein Textfile auf dem Server Schreiben, das ist aber sehr unschön, und auch nicht garantiert das du schreib rechte hast per php auf deinem Server. Mit der Datenbank ist es die eleganteste Lösung da du wahrscheinlich eh eine Datenbank hast wenn du User die sich einloggen besitzt ;)
 
Eine Datenbank wäre sicher besser und auch einfacher in der Handhabung.

Du kannst nicht nur den Namen der Seite in die DB eintragen und dann davon ausgehen das sie in Benützung ist. Du musst z.B. über eine Sessionvariable den aktuellen Benutzer mitführen und beim Zugriff prüfen ob er auf die Seite darf oder nicht. Damit du merkst ob jemand die Seite verlassen hat, würde ich wie oben schon geschrieben bei jedem Klick die Uhrzeit in der DB speichern.

Wenn jetzt jemand auf die Seite will und es gibt einen Eintrag der beispielsweise 5 Minuten alt ist (dieses Limit musst du halt festlegen) wird der Eintrag gelöscht und der neue Besucher darf rein.
 
Solange du keine zu großen Besucherzahlen und ausreichend Schreibrechte auf dem System hast, funktioniert die Variante mit der Textdatei einwandfrei.

Einfach einen Timestamp mit SessionID in der Datei ablegen und über das Skript den Zeitraum festlegen, wie lange nach der letzten Aktion wieder jemand auf die Seite zugreifen darf.

Wenn du dann mehrere Einträge in der Textdatei zulässt, dann kannst du diese mit foreach() schön auslesen.

Aber bei einer höheren Besucherfrequenz würde ich dir auch zu einer Datenbanklösung raten :)
 
Also ich habe ein Loginsystem das leuft aber über AccessProtect. Also keine Datenbank und das was ich auf meinem Server liegen habe braucht keine MySQL oä. da das nur der "Ausweichserver" für ein Collegen der sagte ich solle mein System auf meinem Server lassen und dann wäre das ok. Würde mich freuen wenn jemand mir sagen könnte wie das geht mit der Textfile.

Gruß Lukas.
 
Da ich gleich wieder weg muss nur eine ganz knappe Version:

PHP:
<?php
session_start();

if (!isset($_SESSION['id'])) {
    $_SESSION['id'] = session_id();
}

if (isset($_SESSION['id'])) {
    $file = fopen("log.txt", "r");
    $status = fgetcsv($file,1000 ,";");
    fclose($file);
}

if ($status[0] != $_SESSION['id']) {
    echo "Seitenaufruf ung&uuml;ltig " .$status[0] ." - " .$_SESSION['id'];
} else {
    echo "Alles in Ordnung.";
    $file = fopen("log.txt", "w");
    fputs($file, $_SESSION['id'] .";" .date("H.i") .";" ."a.php");
    fclose($file);
}
?>

Es wird hier nur geprüft ob in der Datei die selbe ID steht oder nicht. Der Seitenname und die Uhrzeit wird hiermit nicht geprüft bzw. eine Seite nach Ablauf einer gewissen Frist wieder freigegeben. Von der Funktion sollte es dir aber zumindest ein Stück weiterhelfen.

Aber ich bleibe trotzdem dabei. Auch wenn es nur ein Ausweichserver ist, leg dir ne kleine Datenbank an. Du tust dir mit einer Textdatei keinen gefallen.
Wenn du womöglich auch noch mehrere Seiten damit überwachen willst und dann noch einige Zugriffe zur gleichen Zeit hast, wird so eine Lösung sicher schnell Probleme machen.
 
Zurück