mehrfach login vermeiden

BLUE SKORPION

Grünschnabel
hallo
ich habe ein sehr ernstes problem:

ich möchte bzw muss verhindern das sich user mehrfach einlogen können ( verhindern das sich user mehrfach mit dem selben usernamen einlogen) es soll nicht nöglich sein das sich ein user mit seinem benutzernamen und kennwort von verschiedenen Rechnern einlogen kann ( verschieden ip-adressen und auch nicht mit lokalen netzwerken ( mehre pc´s über ruoter) und es sollte nur bestimmten user möglich sein sich parallel einzulogen ( admin´s)
das 2. problem ist das verhindert werden soll das ein user mehre paidbanner gleichzeitig anklicken kann ( mit script usw.) um so mehr klicks zu erreichen und damit die reloadzeit zu verkürzen

die Seite ist in php geschrieben und ich brauche die php-code zeilen um diese prob´s zu lösen und bin über jeden tip sehr dankbar
mfg blue skorpion
 
Servus,
Also das mit dem Mehrfachlogin vom selben benutzer kannste mit ner Datenbankabfrage lösen, (istEingeloggt=1) und ner bedingung beim Login ;
PHP:
if($row['istEingeloggt']!=1){
//weiter mit dem Loginprozess
}else{
//Ausgabe das Benutzer schon eingelogt ist, evt IP speichern Warnmeldungen 
//schicken etc
}.
 
Problem 1: Wenn du vor hast, nur bestimmten IPs den Login zu erlauben, kannst du nicht verhindern, dass es in einem lokalen Netzwerk über einen Router verschiedene PCs können. Das ist einfach nicht möglich, da du hinter dem Router nicht herausfinden kannst, von welchem Rechner die Anfrage kommt.
Jedenfalls würde ich in der Usertabelle, wo die Logindaten gespeichert sind, eine weitere Spalte 'IP' anlegen. Dort steht dann halt die erlaubte IP für den jeweiligen User und du kannst die dann bei jedem Login überprüfen.
Um zu verhindern, dass sich mehrere User mit einem Account gleichzeitig anmelden, musst du auch auf die Datenbank zurückgreifen.
Ich würde ebenfalls wieder in der Usertabelle eine boolsche (True/False) Spalte 'isOnline' erstellen und dann bei einem Login den Wert auf True stellen.
Das Problem ist allerdings, dass du nie genau weißt, ob der User den Browser vielleicht schon geschlossen hat, also nicht mehr online ist. Deshalt musst du pauschal sagen, falls der User z.B. 10 Minuten nichts macht -> isOnline = False.
Ist nicht ganz einfach umzusetzen, aber es sollte ein ganz guter Ansatz sein.
 
verschieden ip-adressen und auch nicht mit lokalen netzwerken ( mehre pc´s über ruoter) und es sollte nur bestimmten user möglich sein sich parallel einzulogen ( admin´s)

Den Satz versteh ich ned ganz..

Allgemein solltest Du dir mal die Regeln für tutorials.de durchlesen
Link
hier Punkt 12.


Zu deim Problem mit den Paid Banner, die setzen in der Regel bestimte Cookies, die du evt. Abfragen kannst, oder mittels onklick Befehl ein PHP-Script ausführen lassen das selbst eines setzt.
 
Zuletzt bearbeitet:
Schau dir mal meine Login-Datei an, vielleicht hilft es dir bei deinem ersten Problem. Wenn der User sich ein zweites Mal anmeldet, wird die vorhergehende Anmeldung gelöscht.
Hab den Code mal auf das wesentliche beschränkt ($cnx ist die Datenbankverbindung).
PHP:
........
	// Überprüfung User und Passwort
	if ($_POST[submit]) {
		$tmp = MD5($_POST[Password]);
		$sql = "SELECT usr, grp FROM ses_user WHERE (usr='$_POST[User]' AND pw='$tmp')";
		$result= odbc_exec( $cnx, $sql );
		$user = "";
		$group = "user";
		while( odbc_fetch_row($result)) {
			$user = odbc_result($result, 1);
			$group = odbc_result($result, 2);
		}
		
		if ($user != "") {
			srand((double)microtime()*1000000); 	//Zufallsgenerator aktivieren
			$ID = md5(uniqid(rand()));		//$ID aus Zufallszahl generieren
			$Anmeldezeit = time();
			if ($group == "admin") {
				$Anmeldedauer = 60*60;		//Gültigkeitsdauer für Admins auf 60 Minuten setzen
			} else {
				$Anmeldedauer = 60*15;		//Gültigkeitsdauer für normale User auf 15 Minuten setzen
			}

			$sql = "DELETE FROM ses_session WHERE (usr = '$user')";	//ggf. unter gleichem Account angemeldeten User kicken
			odbc_exec( $cnx, $sql );

			$sql = "INSERT INTO ses_session (sessionID, usr, anmeldezeit, anmeldedauer) VALUES ('$ID','$user','$Anmeldezeit','$Anmeldedauer')";
			odbc_exec( $cnx, $sql );

			if ($group != "") {
				Header("Location:homeAdmin.php?ID=" . $ID);
			} else {
				Header("Location:home.php?ID=" . $ID);
			}
		} else {
			echo $toplayout;
			// Beginn des Arbeitsbereiches
			echo "<td style='vertical-align: top; text-align: center;'>";
			echo "<br/>";
			echo "<div class='Text_Size_4'>";
				echo "Benutzer oder Passwort falsch";
			echo "</div>";
		}
	}
...........
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück