Visa ett inlägg
Oläst 2008-03-11, 17:25 #6
Kristoffer G Kristoffer G är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2007
Inlägg: 1 014
Kristoffer G Kristoffer G är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2007
Inlägg: 1 014
Här har du en variant på ett login+registrerings system som jag gjort...ett väldigt väldigt simpelt sådan...


register.php
Kod:
<?php
//Kontrollerar om du försöker registrera dig
if(isset($_POST['skicka'])){
include 'inc/connect.php';
include 'inc/functions.php';
 
$in_user * *= $_POST['user'];
$in_pass * *= $_POST['pass'];
$in_check * = $_POST['check'];
 
//Anropar tre funktioner som kontrollerar de inmatade värdena
$check1 = langd($in_user, $in_pass);
$check2 = same($in_pass, $in_check);
$check3 = exists($in_user);
 
//Om allt är ok
if($check1 == "ok"){
if($check2 == "ok"){
if($check3 == "ok"){
 
//Genererar ett slumpat tal
$x = mt_rand(strlen($in_user), 101);
//Anropar frunktioner för att generera hash+salt+multiple runs
$p_hash = password($in_pass, $x);
$salt * = salt();
$fused *= fuse($p_hash, $salt, $x);
 
//Skickar in värdena i databasen
$count = $conn->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<br />";}
if($check2 !== "ok"){ echo "$check2<br />";}
if($check3 !== "ok"){ echo "$check3<br />";}
}
if(isset($_GET['done'])){
echo "Registrering lyckad";
}
?>
<form action="register.php" method="post">
Användarnamn: *<br />
<input type="text" name="user" /> <em>Minst 4 tecken</em><br />
Lösenord: <br />
<input type="password" name="pass" /> <em>Minst 4 tecken</em><br />
Upprepa Lösenord: <br />
<input type="password" name="check" /><br />
<input type="submit" name="skicka" value="Registrera" />
</form>
Login.php
Kod:
<?php
//If-sats som kontrollerar om man försöker logga in
if(isset($_POST['login'])){
include 'inc/connect.php';
include 'inc/functions.php';
 
$in_user = $_POST['user'];
$in_pass = $_POST['pass'];
 
//Hämtar värden från databasen, baserat på användarnamnet
$conn->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"; }
}
?>
<form action="login.php" method="post">
Användarnamn: *<br />
<input type="text" name="user" /> <em>Minst 4 tecken</em><br />
Lösenord: <br />
<input type="password" name="pass" /> <em>Minst 4 tecken</em><br />
<input type="submit" name="login" value="Login" />
</form>
Funktionerna
Kod:
<?php
//Kontrollerar längden på användarnamn och lösenord
function langd ($var1, $var2){
 * *if(strlen($var1)<4 || strlen($var2) <4){
 * *$error = "*Användarnamnet eller lösenordet är för kort";
 * *}
 * *else {$error = "ok"; }
 * *return $error;
}
 
//Kontrollerar om lösenordet matchar det upprepade lösenordet
function same($var1, $var2){
 * *if($var1 !== $var2){ $error = "*Lösenorden matchar inte"; }
 * *else { $error = "ok"; }
 * *return $error;
}
 
//Kontrollerar om användarnamnet redan existerar
function exists ($var1){
 * *include 'connect.php';
 * *
 * *$conn->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;
}
?>
Du kan kolla i funktionerna osv hur jag har gjort. Fungerar väldigt bra... men tänk på att salt och x helst inte ska paras tilslammans med lösenordet i databasen.


EDIT*
Såg att jag glömt fixa så att INPUT kör genom prepared... men det ska det.
Kristoffer G är inte uppkopplad   Svara med citatSvara med citat