webForumDet fria alternativet

Inte samma användare inloggad samtidigt

2 svar · 222 visningar · startad av pakmannen

pakmannenMedlem sedan dec. 2002227 inlägg
#1

Hej,

håller på med ett inloggnings script som börjar bli jävligt rörig.. Till en början gjorde jag det med sesssions, sen var jag tvungen att göra så samma användare inte kunde vara inloggad samtidigt, och ni här på webforum rekommenderade att använda tabeller och en tidsskillnad.

if($_SESSION["logged"]==1) {

	include "db_conn.php";
	$SQL = "SELECT Tidpunkt FROM Kunder WHERE KID=".$_SESSION["KID"];
	$data = mysql_query($SQL) or die(mysql_error());
		while ($row = mysql_fetch_array ($data)) { 
			$oldtimes=$row["Tidpunkt"];
		}		

	if(time()- $oldtimes > 10) {
		$SQLTT = "UPDATE Kunder SET Tidpunkt=0 WHERE KID='".$_SESSION["KID"]."'";
		mysql_query($SQLTT);
		mysql_close($open);
		$_SESSION = array(); 
		session_destroy();
		header("Location: index.php?loggadesut=1");
		exit;
	}

	$SQLT = "UPDATE Kunder SET Tidpunkt='".time()."' WHERE KID='".$_SESSION["KID"]."'";
	mysql_query($SQLT);
	mysql_close($open);
}

Denna kod körs i början på varje sida. Den kollar alltså om man är inloggad, och då uppdaterar den tidpunkten i databasen, jämför med nuvarande tid och lite sådant. Just nu ligger tidsskillnaden på 10 sekunder, den ska sedan ligga på cirka 10 minuter.

MEN! Nu uppstår det ett problem. Så här ser inloggnings scriptet ut:

//Logga in
if($_GET["loggain"]==1) {

	//Kollar om E-posten och Lösenordet finns
	$Epost=$_POST["Epost"];
	$Losenord=$_POST["Losenord"];

	include "admin/db_conn.php";
	$SQL = "SELECT KID,Epost,Losenord,Tidpunkt FROM Kunder";
	$oldtimes=$row["Tidpunkt"];
	$data = mysql_query($SQL) or die(mysql_error());
		while ($row = mysql_fetch_array ($data)) { 
			if($row["Epost"]==$Epost && $row["Losenord"]==$Losenord) {								
				if(time()- $oldtimes > 10) {
					//Loggar in
					$SQLT = "UPDATE Kunder SET Tidpunkt='".time()."' WHERE KID='".$row["KID"]."'";
					mysql_query($SQLT);

					$_SESSION["logged"] = 1;
					$_SESSION["KID"] = $row["KID"];
					mysql_close($open);
					header("Location: index.php");
					exit;
				} else {
					header("Location: index.php?redaninloggad=1");
					exit;
				}
			}
		}
	mysql_close($open);
	header("Location: index.php?logfel=1");
	exit;
}

//Logga ut
if($_GET["loggaut"]==1) {
	include "admin/db_conn.php";
	$SQLT = "UPDATE Kunder SET Tidpunkt=0 WHERE KID='".$_SESSION["KID"]."'";
	mysql_query($SQLT);
	mysql_close($open);
	
	$_SESSION = array(); 
	session_destroy();
	header("Location: index.php");
	exit;
}

Grejen är att om en användare är inaktiv i dessa 10 minuter, och INTE klickar på någon länk så att den loggas ut, så kan en annan person logga in med samma uppgifter från en annan dator och uppdaterar då alltså tidpunkten i databasen, så den första användaren blir inte utloggad om han fortsätter gå runt på sidan.

Okej, om någon fattar vad jag svamlar om så får ni gärna föreslå hur jag kan lösa det. Helst utan att behöva skriva om alltihopa. :e

Edit - Hur gör jag för att tråden inte ska bli så bred?

tydalMedlem sedan juni 20034 013 inlägg
#2

Lagra tidpunkten även i sessionen och jämför med det som står i databasen. Står det samma tid är det rätt session.

SnakesMedlem sedan okt. 2004392 inlägg
#3

Loggar någon in så blir (den nya fältet som heter inloggad) 1 annars är den på 0... alltså om någon loggar in och det är 1 så skriver du att man inte kan logga osv.....

men 0 måste återställas tillräckligt ofta att man kan logga in normalt, men inte så ofta att man kan logga in två gånger ;)...

Hoppas du förstår vad jag menar!

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)