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?