Vraag & Antwoord

Webprogrammeren & scripting

Script wil cookie niet starten

4 antwoorden
  • Ik heb een tijdje terug een loginscript gemaakt voor mijn wmc. Ik ben toen een aantal weken gestopt en wou het van de week weer oppakken maar op de een of andere manier kan ik niet meer inloggen. Het is nog steeds hetzelfde script als een aantal weken geleden en ik heb het op meerdere thuisservers geprobeerd, waaronder: * UsbWebserver * Xampp * EasyPHP en een aantal andere. Oja, er worden ook geen errors weergegeven terwijl error eall ofzo aanstaat. Ik ben er vandaag ook nog achter gekomen dat hij de cookies gewoon niet aanmaakt omdat als ik ze op een andere pagina controleer, dan bestaan ze opeens niet meer. Script: [code:1:702a6fc9ce] <?php if(isset($_COOKIE["gebruikersnaam"])) { echo $code9; } Else { if (isset($_POST['submit1']) && $_POST['submit1'] == '1') { $gebruikersnaam = $_POST['gebruikersnaam']; $wachtwoord = md5($_POST['wachtwoord']); $tijd = $_POST['tijd']; $query = mysql_query("SELECT * FROM leden WHERE gebruikersnaam = '$gebruikersnaam'"); $result = mysql_num_rows($query); $query1 = mysql_query("SELECT * FROM leden WHERE gebruikersnaam = '$gebruikersnaam' && wachtwoord = '$wachtwoord'"); $result1 = mysql_num_rows($query1); $query2 = mysql_query("SELECT * FROM leden WHERE gebruikersnaam = '$gebruikersnaam'"); while($result2 = mysql_fetch_object($query2)){ $id = $result2->memberid; } if($gebruikersnaam == ''){ $code = $code3; }elseif($wachtwoord == ''){ $code = $code5; }elseif(!preg_match('/^[A-Za-z0-9_-]+$/',$gebruikersnaam)) { $code = $code8; }elseif($result == ''){ $code = $code8; }elseif($result1 == ''){ $code = $code8; } If($tijd == "Jaar") { $lengte = 60*60*24*365; } ElseIf($tijd == "Maand") { $lengte = 60*60*24*31; } ElseIf($tijd == "Week") { $lengte = 60*60*24*7; } Elseif($tijd == "dag") { $lengte = 60*60*24; } else { $lengte = 60*60*24; } if(isset($code)){ echo''.$code.''; } else { setcookie("gebruikersnaam", $gebruikersnaam, time() + $lengte, "/"); setcookie("wachtwoord", $wachtwoord, time() + $lengte, "/"); setcookie("id", $id, time() + $lengte, "/"); echo'Je bent succesvol ingelogd'; ?> <meta http-equiv="refresh" content="1; url=index.php"> <?php } } else { ?> <form method="POST" action="?pagina=leden/inloggen"> <input type="hidden" name="submit1" value="1"> <table cellpadding="1" cellspacing="1" width="100%"> <tr><td width="1%">Gebruikersnaam:</td><td><input type="text" name="gebruikersnaam"></td></TR> <tr><td width="1%">Wachtwoord:</td><td><input type="password" name="wachtwoord"></td></TR> <tr><td width="1%"></td><td><select name="tijd"><option value="Dag">Dag</option><option value="Week">Week</option><option value="Maand">Maand</option><option value="Jaar">Jaar</option></select></td></TR> <td width="1%"> </td><td><input type="submit" value="Inloggen"> <input type="reset" name="reset" value="Opnieuw"></td></table> <form> <? } } ?> [/code:1:702a6fc9ce] Ik controleer dus ook op andere pagina's door: [code:1:702a6fc9ce] if(!isset($_COOKIE["gebruikersnaam"])) { echo $code9; } Else { // Pagina } [/code:1:702a6fc9ce] te gebruiken. Ik heb de updates van alle servers gedownload, php.ini bestand vervangen en nog steeds doet hij het gewoon niet. Misschien is er hier iemand die mij kan helpen. P.S. Het script heeft dus eerst wel gewerkt. alvast bedankt, kevin tuns
  • Hmm... controleer die $lengte eens bij setcookie. Is die wel gedefineerd binnen de scope waarin setcookie zich bevindt? Je kunt dit makkelijk controleren door onder "echo 'Je bent succesvol ingelogd';" even tijdelijk "echo $lengte;" te zetten. Als dan een of andere waarde verschijnt tijdens het inloggen, dan heb ik het mis, en anders moet je even aan het begin van je programma "$lengte = 0;" o.i.d. zetten.
  • Ja, de lengte word gedefineerd dus daar ligt het probleem niet. :-? Ik heb dit probleem al op ongeveer 7 forums gepost, maar niemand schijnt het andwoord te weten.
  • Nee? Controleer deze dingen eens: - Krijg je de melding "er is succesvol ingelogd" ? - Heeft $gebruikersnaam een waarde bij setcookie? - Heeft "time() + $lengte" een waarde bij setcookie? - Controleer de waarde die setcookie teruggeeft. Als dit false is, dan is ervoor al content verzonden naar de client en moet je ervoor zorgen dat dit niet gebeurt. BTW: dit scriptje rammelt wel aan alle kanten. Ten eerste is het kwetsbaar voor SQL-injecties via de "gebruikersnaam" post-variabele. Daarnaast kun je gewoon inloggen zonder wachtwoord doordat alleen op een "gebruikersnaam" cookie wordt gecontroleerd. Bijvoorbeeld door "javascript:void(document.cookie='gebruikersnaam=abc')" in te voeren in de adresbalk terwijl je je op die site bevindt waarna je gewoon een adres van een "beveiligde" pagina intypt.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.