Registrering+inlogg

mars 6th, 2008 by admin Leave a reply »

Nästa PHP script jag vill dela med mig av är ett registrerin+login system i PHP som jobbar mot en MySQL databas. Innan ni testar scriptet måste ni kontrollera om ni har PDO aktiverat i php.ini…. om ni inte har det kan ni läsa här.

Värt att nämna är att jag sparar alla uppgifter tillsammans i databasen för att lättare illustrera. För att utöka säkerheten bör man spara saltet och möjligtvis x på andra ställen.

Hela scriptet finns att ladda ner under fliken PHP högst uppe.

register.php
[php]
exec(”INSERT INTO Uregister(user, password, salt, x)VALUES(‘$in_user’, ‘$fused’, ‘$salt’, ‘$x’)”);
$conn = null;

header (”location: register.php?done”);
}
}
}
//Skriver ut eventuella felmeddelanden
if($check1 !== ”ok”){ echo ”$check1
”;}
if($check2 !== ”ok”){ echo ”$check2
”;}
if($check3 !== ”ok”){ echo ”$check3
”;}
}
if(isset($_GET['done'])){
echo ”Registrering lyckad”;
}
?>

Användarnamn:
Minst 4 tecken
Lösenord:
Minst 4 tecken
Upprepa Lösenord:


[/php]

login.php
[php]
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$do = $conn->prepare(”SELECT password, salt, x FROM Uregister WHERE user = :user LIMIT 1″);
$do->bindParam(‘:user’, $in_user, PDO::PARAM_STR);
$do->execute();
$obj = $do->fetch(PDO::FETCH_OBJ);

$db_pass = $obj->password;
$db_salt = $obj->salt;
$db_x = $obj->x;

//Anropar funktionerna som behövs föra tt återskapa lösenordet
$gen_pass = password($in_pass, $db_x);
$gen_fuse = fuse($gen_pass, $db_salt, $db_x);
$conn = null;

//Kontrollerar om lösenorden matchar
if($gen_fuse == $db_pass){
//Skapar en session med alla uppgifter
session_start();
$_SESSION['user'] = $in_user;
$_SESSION['pass'] = $db_pass;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

echo ”Du är nu inloggad som {$_SESSION['user']}”;
}
else{ echo ”Fel användarnamn eller lösenord”; }
}
?>

Användarnamn:
Minst 4 tecken
Lösenord:
Minst 4 tecken

[/php]

functions.php
[php]
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$do= $conn->prepare (”SELECT COUNT(id) as antal FROM Uregister WHERE user = :user ”);
$do->bindParam(‘:user’, $var1, PDO::PARAM_INT);
$do->execute();
$obj = $do->fetch(PDO::FETCH_OBJ);
$db_count = $obj->antal;

if($db_count < 1){ $error = "ok"; } else { $error = "*Det angivna användarnamnet finns redan"; } $conn = null; return $error; } //Hashar lösenordet function password ($password, $x){ $password = md5($password); for($i=0; $i <= $runs; $i++){ $password = sha1($password); } return $password; } //Skapar ett salt function salt (){ $chars = "8!b9yea@of,g5ic¤j2d3k4_l7mhrn%#ps&t6uqvx-.1"; $length = strlen($chars); for($i=0; $i <= $length; $i++){ $runs = mt_rand(0,$length); $salt .= substr($chars, $runs, 1); } return sha1($salt); } //Bakar ihop lösenordet och saltet i en loop function fuse ($password, $salt, $x){ for($i=0; $i <= $runs; $i++){ $fused = sha1("$password @:_:@ $salt"); } return $fused; } ?>
[/php]

connect.php
[php]
getMessage();
}
?>
[/php]

Tabellen för databasen
[php]
CREATE TABLE `users`.`uregister` (
`id` INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 50 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
`salt` VARCHAR( 50 ) NOT NULL ,
`x` INT( 10 ) NOT NULL
) ENGINE = MYISAM
[/php]

Advertisement

Kommentera