Thread: Problemen login systeem
-
30-03-2010, 21:51 #1
Problemen login systeem
Ik ben een paar weken begonnen met php, en ik moet zeggen dat ik een leuke scripttingtaal vind!
Ik ben om me een beetje te oefenen een site aan het maken meteen login gedeelte, alleen; ik ben nu al een hele tijd aan het zoeken en sukkelen, maar het lukt echt niet, en ik weet niet hoe het komt...
Homepage: Een standaard login formpje
HTML Code:<form name="login" method="post" id="login" action="welkom.php" > <table cellspacing="10"> <tr> <td>Login </td> <td> <input type="text" name="myUsername"/> </td> </tr> <tr> <td>Wachtwoord </td> <td> <input type="password" name="myPassword" /> </td> </tr> <tr> <td> <input type="submit" value="Login" name="Submit"/> </td> <td> <a href=""> Registreren?</a> </td> </tr> </table> </form>
Welkom pagina; de pagina waar je heen gaat als je ingelogt bent.
Ingelogde pagina: de pagina waar je alleen maar zou moeten kunnen bekijken indien ingelogt, tevens een gewone controle om te kijken of alles werkt.PHP Code:ob_start();
$host="localhost";
$username="Jadran";
$password="***";
$dbname="Login";
$tblname="users";
$fout="FOUT: openen database mislukt, gelieve opnieuw te proberen";
mysql_connect("$host" , "$username" , "$password" ) or die ("Couldn't connect to database");
mysql_select_db("$dbname") or die ("Couldn't find database");
if(!isset($_POST['Submit']))
{
print_r($_POST); // kijken welke variabelen er gestockeerd zijn
$myusername =$_POST['myUsername'];
$mypassword =$_POST['myPassword'];
$query = "select * from $tblname where loginName = '$myusername' and loginPass = '$mypassword'";
$result = mysql_query($query);
$count = mysql_num_rows($result);
if($count > 0)
{
session_register("myUsername");
session_register("myPassword");
header("location: portfolio.php");
}
else
{
echo("Error");
}
}
Het probleem is dat het niet blijkt te werken, en ik zou niet weten hoe het komt.PHP Code:<?php
session_start();
if(isset($_SESSION["myUsername"]))
{
print("Ingelogt");
}
else
{
print("Error");
}
?>
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
Met de sql database is alles normaal gezien in orde. Het is waarschijnlijk een dom foutje, maar ik ben radeloos
Last edited by profound; 30-03-2010 at 23:33.
no votes
-
-
30-03-2010, 22:58 #2
Je gebruikt session_register(), dat is een functie die niet meer bestaat in de laatste versies van PHP en daarom niet meer gebruikt wordt. Gebruik dus om sessie-variabelen aan te maken gewoon $_SESSION['foo'] = 'bar';. Zorg dan ook wel dat je session_start() ook op deze pagina uitvoert.
Je gebruikt if(!isset($_POST['Submit'])), d.w.z. als de variabele $_POST['Submit'] niet bestaat wordt het stuk tussen de accolades uitgevoerd. Dat lijkt me het omgekeerde van wat je wil, ik zou denken dat je de code wil uitvoeren als de variabele wel bestaat.
Bovendien zijn namen van variabelen hoofdlettergevoelig, myUsername (bij session_register) is niet hetzelfde als myusername (de naam van je variabele).
Nog enkele andere opmerkingen:
- Knip je database-gegevens weg uit je post.
- Gebruik ipv if(isset($_POST['Submit'])) beter
- Hoe variabelen buiten quotes, die zijn enkel nodig om strings te verwerken:PHP Code:if($_SERVER['REQUEST_METHOD'] == "POST")
- Security: maak minstens gebruik van een hashfunctie om paswoorden te versleutelen en slaag geen paswoorden op in een session-var of cookie. Bescherm je tegen SQL-injection door mysql_real_escape_string() te gebruiken.PHP Code:$query = 'select * from $tblname where loginName = "'.$myusername.'" and loginPass = "'.$mypassword.'"';
- IngelogD
welkom.php kan er dan bijvoorbeeld als volgt uitzien:
PHP Code:<?php
session_start();
$host = "localhost";
$username = "****";
$password = "****";
$dbname = "Login";
$tblname = "users";
$dbConnect = mysql_connect($host,$username,$password);
if(!$dbConnect)
{
echo 'Error: could not connect to the MySQL-server.';
}
else
{
$dbSelect = mysql_select_db($dbname);
if(!$dbSelect)
{
echo 'Error: could not select the database.';
}
else
{
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$qCheckUser = 'SELECT * FROM '.$tblname.' WHERE loginName = "'.mysql_real_escape_string($_POST['myUsername']).'" AND loginPass = "'.mysql_real_escape_string($_POST['myPassword']).'"';
// + gebruik md5 of sha1 om je wachtwoorden te hashen, ev. met toegevoegde salt
$result = mysql_query($qCheckUser);
if(!$result)
{
echo 'Error: the query was invalid.';
}
else
{
$_SESSION['myUsername'] = $_POST['myUsername'];
header("Location: portfolio.php");
}
}
else
{
'No form sent.';
}
}
}
?>no votes
-
30-03-2010, 23:40 #3
In ieder geval al ontzettend bedankt voor je reply!
1) Ik bedoelde idd if(isset($_POST['Submit'])), zonder de ! dus, had ik volledig overgekeken!
2) Mijn database gegevens voer ik normaal in via een include(), maar omdat ik een goed overzicht wou over al mijn gegevens, heb ik dit eventjes achterwege gelaten.
3) Idem met het encrypteren van de wachtwoorden! Dit wou ik allemaal doen, nadat het inloggen naar behoren werkte!
4) Ingelogd, ik zal er op proberen letten
5) Nu werkt het! Eindelijk!
Nogmaals bedankt dude!
no votes
-
31-03-2010, 01:40 #4
1 opmerking:
WAAROM gebruikt ge output buffer?
Da is toch gewoon copy paste van ergens 
Slaag geen passworden op die niet gesalted + gehashed zijn met sha1 op in een cookie/sessie. Zulke hash moogt ge imo in een cookie / sessie opslagen. Daar zie ik geen graten in ( plz correct me if wrong )- Security: maak minstens gebruik van een hashfunctie om paswoorden te versleutelen en slaag geen paswoorden op in een session-var of cookieno votes
-
31-03-2010, 18:14 #5
Het vormt dan inderdaad geen direct groot probleem maar als iemand er op een of andere manier toch in slaagt een hash te kraken is het veel minder erg dat een random generated string wordt gevonden dan een echt paswoord van een gebruiker. De kans op kraken is dan wel richting infinitesimaal klein bij salted sha1, aangezien meestal gewoon md5 gebruikt wordt, lijkt het me niet slecht het als algemene regel te posteren. Het lijkt me bovendien ook nooit nodig in een systeem nodig om paswoorden langdurig te onthouden.
no votes

