inlogsysteem fout
Designick - 31/03/2009 19:07
Nieuw lid
Hallo,
Ik heb een inlogsysteem voor users,
als deze inloggen doet dat het. Als ze daarna op een link klikken bijvoorbeeld: nieuws toevoegen: krijgen ze nogmaals dit inlogscherm.
Na deze 2e keer inloggen onthoud hij wel je gegevens.
Weet iemand een oplossing voor dit probleem?
<?
}else{
if(isset($_COOKIE['user_id'])) {
// Cookie uitlezen, sessie aanmaken
$sql = "SELECT id,status,wachtwoord,actief FROM gebruikers WHERE id='".$_COOKIE['user_id']."'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$id = htmlspecialchars($rij->id);
$status = htmlspecialchars($rij->status);
$dbpass = htmlspecialchars($rij->wachtwoord);
$actief = htmlspecialchars($rij->actief);
if($dbpass == $_COOKIE['user_password'] AND $actief == 1) {
$_SESSION['user_id'] = $id;
$_SESSION['user_status'] = $status;
?>
Er is weer een sessie aangemaakt. Je wordt doorverwezen.
<script language="Javascript" type="text/javascript">
location.href='<?= $loginpage ?>';
</script>
<?
}else{
echo "Je cookie klopt niet met wat er in de database staat of je account is niet geactiveerd. Mogelijk heb je je wachtwoord veranderd.<br />\nJe oude cookies zijn verwijderd.";
setcookie("user_id", "", time() - 3600);
setcookie("user_password", "", time() - 3600);
}
}else{
if(isset($_POST['submit'])) {
// Inloggen
$sql = "SELECT id,naam,wachtwoord,status,actief FROM gebruikers WHERE naam='".$_POST['user']."'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$dbpass = htmlspecialchars($rij->wachtwoord);
$userpass = md5($_POST['pass']);
$userid = htmlspecialchars($rij->id);
$userstatus = htmlspecialchars($rij->status);
$useractief = htmlspecialchars($rij->actief);
if($dbpass == $userpass) {
if($useractief == 1) {
$_SESSION['user_id'] = $userid;
$_SESSION['user_status'] = $userstatus;
if($_POST['cookie'] == "do") {
setcookie("user_id", $userid, time() + 365 * 86400);
setcookie("user_password", $dbpass, time() + 365 * 86400);
}
?>
Je bent succesvol ingelogd.<br />
Je wordt doorgestuurd, indien er niets gebeurd <a href="<?= $loginpage ?>">klik dan hier</a>.
<script language="Javascript" type="text/javascript">
location.href='<?= $loginpage ?>';
</script>
<?
}else{
echo "Je account is niet geactiveerd. Activeer deze, door op de link in de verzonden e-mail te klikken.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}else{
echo "Het door jouw ingevoerd wachtwoord klopt niet voor de gebruiker '".$_POST['user']."'.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}else{
// Inlogform
?>
<form method="post" action="inloggen.php">
<table style="margin-top:12px">
<tr>
<td><input name="user" type="text" value="Gebruikersnaam" size="14" style="background-color:transparent; border:solid 1px;font-family:Arial, Helvetica, sans-serif; color:#a10c4f; border-color:#da015d; font-size:11px;"/></td>
<td><input name="pass" type="password" size="13" style="background-color:transparent; border:solid 1px;font-family:Arial, Helvetica, sans-serif; color:#ffffff; border-color:#da015d; font-size:11px;"/></td>
<td><input type="checkbox" name="cookie" value="do" style="border: 0px;" /><font size="-2" color="#333333" face="Arial, Helvetica, sans-serif"></font></td><td><input type="submit" name="submit" value="→" style="font-size:12px; background-color:transparent; border:none; cursor:pointer;"/><a class="active" href="waarom.php"><b style="color:#333333; font-weight:lighter"> ?</b></a></td>
</tr>
</table>
</form>
<?
}
}
}
include("htmlbottom.php");
?>
<?
} else {
if ( isset ( $_COOKIE [ 'user_id' ] ) ) { // Cookie uitlezen, sessie aanmaken
$sql = "SELECT id,status,wachtwoord,actief FROM gebruikers WHERE id='" . $_COOKIE [ 'user_id' ] . "'" ;
if ( $dbpass == $_COOKIE [ 'user_password' ] AND $actief == 1 ) {
$_SESSION [ 'user_id' ] = $id ;
$_SESSION [ 'user_status' ] = $status ;
?>
Er is weer een sessie aangemaakt. Je wordt doorverwezen.
<script language="Javascript" type="text/javascript">
location.href='<?= $loginpage ?> ';
</script>
<?
} else {
echo "Je cookie klopt niet met wat er in de database staat of je account is niet geactiveerd. Mogelijk heb je je wachtwoord veranderd.<br />\n Je oude cookies zijn verwijderd." ; }
} else {
if ( isset ( $_POST [ 'submit' ] ) ) { // Inloggen
$sql = "SELECT id,naam,wachtwoord,status,actief FROM gebruikers WHERE naam='" . $_POST [ 'user' ] . "'" ;
$userpass = md5 ( $_POST [ 'pass' ] ) ; if ( $dbpass == $userpass ) {
if ( $useractief == 1 ) {
$_SESSION [ 'user_id' ] = $userid ;
$_SESSION [ 'user_status' ] = $userstatus ;
if ( $_POST [ 'cookie' ] == "do" ) {
}
?>
Je bent succesvol ingelogd.<br />
Je wordt doorgestuurd, indien er niets gebeurd <a href="<?= $loginpage ?> ">klik dan hier</a>.
<script language="Javascript" type="text/javascript">
location.href='<?= $loginpage ?> ';
</script>
<?
} else {
echo "Je account is niet geactiveerd. Activeer deze, door op de link in de verzonden e-mail te klikken.<br />\n <a href=\" javascript:history.back()\" >« Ga terug</a>" ; }
} else {
echo "Het door jouw ingevoerd wachtwoord klopt niet voor de gebruiker '" . $_POST [ 'user' ] . "'.<br />\n <a href=\" javascript:history.back()\" >« Ga terug</a>" ; }
} else {
// Inlogform
?>
<form method="post" action="inloggen.php">
<table style="margin-top:12px">
<tr>
<td><input name="user" type="text" value="Gebruikersnaam" size="14" style="background-color:transparent; border:solid 1px;font-family:Arial, Helvetica, sans-serif; color:#a10c4f; border-color:#da015d; font-size:11px;"/></td>
<td><input name="pass" type="password" size="13" style="background-color:transparent; border:solid 1px;font-family:Arial, Helvetica, sans-serif; color:#ffffff; border-color:#da015d; font-size:11px;"/></td>
<td><input type="checkbox" name="cookie" value="do" style="border: 0px;" /><font size="-2" color="#333333" face="Arial, Helvetica, sans-serif"></font></td><td><input type="submit" name="submit" value="→" style="font-size:12px; background-color:transparent; border:none; cursor:pointer;"/><a class="active" href="waarom.php"><b style="color:#333333; font-weight:lighter"> ?</b></a></td>
</tr>
</table>
</form>
<?
}
}
}
include ( "htmlbottom.php" ) ;
?>
7 antwoorden
Gesponsorde links
svghosting - 31/03/2009 19:30
Lid
#
setcookie("user_id", "", time() - 3600);
#
setcookie("user_password", "", time() - 3600
JE hebt een cookie ingesteld met de tijd dat mensen ingelogd blijven, deze tijd is wel erg kort...
svghosting - 31/03/2009 19:47
Lid
@ Konijnsnuf,
Sorry dat ik een reactie plaats op jou reactie. Maar je hebt absoluut geen verstand van php. Waarom reageer je dan?
Verder...
Designnick heb je je tijd al veranderd in je code?
Designick - 31/03/2009 19:48 (laatste wijziging 31/03/2009 19:49)
Nieuw lid
Nee helemaal niet :O
Ik heb m zo van het internet, al 2 jaar en altijd gewerkt.
Moet ik proberen deze te veranderen?
Heb niet veel verstand van die cookies ;)
Filip - 31/03/2009 19:58
IRC guru
svghosting schreef:
#
setcookie("user_id", "", time() - 3600);
#
setcookie("user_password", "", time() - 3600
JE hebt een cookie ingesteld met de tijd dat mensen ingelogd blijven, deze tijd is wel erg kort...
Deze setcookie is juist om hem te verwijderen...
setcookie("user_id", $userid, time() + 365 * 86400);
setcookie("user_password", $dbpass, time() + 365 * 86400);
Deze zijn de SET, blijkbaar ken je zelf er ook niet echt zo veel van he...
Whazor - 31/03/2009 20:13
Nieuw lid
1. Je geeft iemand de optie om geen cookies te gebruiken, terwijl je er toch om vraagt bij het kijken of iemand is ingelogd.
2. Je stopt de cookie direct in de query en zo is het mogelijk voor iemand om in te loggen als bijvoorbeeld een admin; of het verwijderen van je database.
Als je dit ECHT zelf hebt gemaakt (wat ik betwijfel) zou ik als ik jou was gaan kijken naar PDO .
Dit is een alternatief voor MySQL, en veel sneller (en ook veiliger als je het goed gebruikt).
Verder raad ik je aan om het script te herschrijven en je verdiepen in cookies+sessions.
Designick - 31/03/2009 20:30
Nieuw lid
Ik heb ook niet gezegd dat ik het zelf geschreven heb!
Ik vrag alleen of mensen weten toevallig een oplossing weet.
Gesponsorde links
Dit onderwerp is gesloten .