Vreemd script
Frederic - 14/05/2005 15:34
PHP ver gevorderde
Dit is een erg vreemd probleem. Mijn browser accepteert cookies, maar de cookies worden maar niet ingesteld! Ik zou echt niet weten waar het aan kan liggen. Als ik de pagina uitvoer krijg ik alles perfect te zien (zie commentaren in code). Ziet iemand waarom er geen cookie komt?
<?php
if(isset($_SESSION['gebruiker'])) {
header("Location: ingelogged.php");
}
?>
<form name="form1" method="post" action="">
<table border="0">
<tr>
<td>Gebruikersnaam:</td>
<td><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="35" <?php if(isset($_GET['gebruikersnaam'])) { ?>value="<?php echo $_GET['gebruikersnaam']; ?>"<?php } ?> /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input name="wachtwoord" type="password" id="wachtwoord" size="35" /></td>
</tr>
<tr>
<td>Tijd:</td>
<td><input type="hidden" value="32140767859200" name="tijd" id="tijd"/>
(cookies vereist) </td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Inloggen" /></td>
</tr>
</table>
</form>
<?php
if(isset($_POST['Submit'])) {
echo $_POST['gebruikersnaam']."<br />"; //CONTROLE, DEZE GEEFT ALLES WEER ZOALS GEPOST
echo $_POST['wachtwoord']."<br />"; //CONTROLE, DEZE GEEFT ALLES WEER ZOALS GEPOST
echo $_POST['tijd']; //CONTROLE, DEZE GEEFT ook ALLES WEER ZOALS GEPOST
$res = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'");
$row = mysql_fetch_assoc($res);
echo $row['wachtwoord'].$row['gebruikersnaam']; //CONTROLE, DEZE ECHO'T ALLES ZOALS HET MOET
setcookie("gebruikersnaam",$row['wachtwoord'],time()+$_POST['tijd']);
setcookie("wachtwoord",$row['wachtwoord'],time()+$_POST['tijd']);
session_start();
$_SESSION['gebruiker'] = $row['gebruikersnaam'];
$_SESSION['gid'] = $row['id'];
//header("Location: index.php"); //WEGGEHAALD OM DE ECHO'S TE KUNNEN LEZEN
} ?>
<?php
if ( isset ( $_SESSION [ 'gebruiker' ] ) ) { header ( "Location: ingelogged.php" ) ; }
?>
<form name="form1" method="post" action="">
<table border="0">
<tr>
<td>Gebruikersnaam:</td>
<td><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="35"
<?php if ( isset ( $_GET [ 'gebruikersnaam' ] ) ) { ?> value="
<?php echo $_GET [ 'gebruikersnaam' ] ; ?> "
<?php } ?> /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input name="wachtwoord" type="password" id="wachtwoord" size="35" /></td>
</tr>
<tr>
<td>Tijd:</td>
<td><input type="hidden" value="32140767859200" name="tijd" id="tijd"/>
(cookies vereist) </td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Inloggen" /></td>
</tr>
</table>
</form>
<?php
if ( isset ( $_POST [ 'Submit' ] ) ) { echo $_POST [ 'gebruikersnaam' ] . "<br />" ; //CONTROLE, DEZE GEEFT ALLES WEER ZOALS GEPOST echo $_POST [ 'wachtwoord' ] . "<br />" ; //CONTROLE, DEZE GEEFT ALLES WEER ZOALS GEPOST echo $_POST [ 'tijd' ] ; //CONTROLE, DEZE GEEFT ook ALLES WEER ZOALS GEPOST $res = mysql_query ( "SELECT * FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "'" ) ; echo $row [ 'wachtwoord' ] . $row [ 'gebruikersnaam' ] ; //CONTROLE, DEZE ECHO'T ALLES ZOALS HET MOET setcookie ( "gebruikersnaam" , $row [ 'wachtwoord' ] , time ( ) + $_POST [ 'tijd' ] ) ; setcookie ( "wachtwoord" , $row [ 'wachtwoord' ] , time ( ) + $_POST [ 'tijd' ] ) ; $_SESSION [ 'gebruiker' ] = $row [ 'gebruikersnaam' ] ;
$_SESSION [ 'gid' ] = $row [ 'id' ] ;
//header("Location: index.php"); //WEGGEHAALD OM DE ECHO'S TE KUNNEN LEZEN
} ?>
14 antwoorden
Gesponsorde links
BigBug - 14/05/2005 15:36
PHP expert
Ik meen dat er altijd een opgegeven tijd bijstaat (tenminste, tot zover ik weet) van +3600 o.i.d.
jopie - 14/05/2005 15:38
Onbekend
door die controles zou je nu errors moeten krijgen (headers already sent), maar als je die weglaat kan het eigenlijk alleen maar aan de tijd liggen (de geposte tijd dus)
Frederic - 14/05/2005 15:59
PHP ver gevorderde
ik gebruik ob_start bovenaan de hoofdpagina (deze wordt geinclude)
@BB: hoe bedoel je?
Legolas - 14/05/2005 16:08
Onbekend
Ik denk dat dat setcookie een té grote tijd mee krijg. Mss dat hij het daarom niet doet.
Frederic - 14/05/2005 16:25
PHP ver gevorderde
Nee, ook daar ligt het niet aan!
Het is wel zo dat ik op de pagina waar ik dit include dit nog heb staan: ligt het daar mss aan?
<?php
session_start();
// als de gebruiker is ingelogd
if(!isset($_SESSION['gebruiker']) && isset($_COOKIE['gebruikersnaam']) && isset($_COOKIE['wachtwoord'])) {
// Gegevens uit koekje halen
$zoek = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_COOKIE['gebruikersnaam']."' AND wachtwoord='".$_COOKIE['wachtwoord']."'");
if(mysql_num_rows($zoek) > 0) {
while($geg = mysql_fetch_assoc($zoek)) {
$_SESSION['gebruiker'] = $geg['gebruikersnaam'];
$_SESSION['gid'] = $geg['id'];
header("Location: ".$_SERVER['REQUEST_URI']);
}
} else {
$_SESSION = array();
session_destroy();
// cookies deleten
if(isset($_COOKIE['gebruikersnaam'])) {
setcookie("gebruikersnaam", "", time(), "/");
}
if(isset($_COOKIE['wachtwoord'])) {
setcookie("wachtwoord", "", time(), "/");
}
}
}
?>
<?php
// als de gebruiker is ingelogd
if ( ! isset ( $_SESSION [ 'gebruiker' ] ) && isset ( $_COOKIE [ 'gebruikersnaam' ] ) && isset ( $_COOKIE [ 'wachtwoord' ] ) ) { // Gegevens uit koekje halen
$zoek = mysql_query ( "SELECT * FROM leden WHERE gebruikersnaam='" . $_COOKIE [ 'gebruikersnaam' ] . "' AND wachtwoord='" . $_COOKIE [ 'wachtwoord' ] . "'" ) ; $_SESSION [ 'gebruiker' ] = $geg [ 'gebruikersnaam' ] ;
$_SESSION [ 'gid' ] = $geg [ 'id' ] ;
header ( "Location: " . $_SERVER [ 'REQUEST_URI' ] ) ; }
} else {
// cookies deleten
if ( isset ( $_COOKIE [ 'gebruikersnaam' ] ) ) { }
if ( isset ( $_COOKIE [ 'wachtwoord' ] ) ) { }
}
}
?>
Legolas - 14/05/2005 16:40
Onbekend
daar moet: time()-3600 of -die tijd
Frederic - 14/05/2005 17:50
PHP ver gevorderde
@Legolas: werkt niet...
@toenie: ja hoor
Legolas - 14/05/2005 18:02 (laatste wijziging 14/05/2005 18:07)
Onbekend
ALS dit principe o.i.d. het niet doet:
<?
Setcookie("wachtwoord",$_POST['wachtwoord'], Time()+$_POST['tijdingelogd']);
?>
<?
Setcookie ( "wachtwoord" , $_POST [ 'wachtwoord' ] , Time ( ) + $_POST [ 'tijdingelogd' ] ) ; ?>
Dan ligt het toch echt aan PHP ofzow. Want bij mij is alles hiermee perfect. PHP Fout?:o:o:o
edit: @celestialcelebi
CelestialCelebi - 14/05/2005 18:05
PHP gevorderde
Nee, bij dat script ligt de fout bij jou. Wachtwoorden zetten we namelijk NOOIT of te nimmer in een cookie. Da's hetzelfde als de sleutel van je huis onder een deurmat met "KIJK HIERONDER" erop leggen.
Fenrir - 14/05/2005 18:06 (laatste wijziging 14/05/2005 18:07)
PHP expert
Je kunt het toch ook alleen met sessions doen?
Dat is gemakkelijker.
Waar wordt je cookie geset?
Er staat geen setcookie().
Ga na welke if's er gedaan worden, door echo('if(!isset($_SESSION[\'gebruiker...') te zetten bij de juiste if's.
Geen ww in cookie, zeker geen echte, als je het dan wilt, gebruik md5().
Frederic - 14/05/2005 18:23 (laatste wijziging 14/05/2005 18:29)
PHP ver gevorderde
Jah tuurlijk gebruik ik md5! Maar voor de code te testen (omdat het niet werkt) het ik deze zoveel mogelijk gestript, dus ook de md5 eruit...
//EDIT: als ik dit heb, mét MD5, is mijn script van wel veilig?
<?php
if(isset($_POST['Submit']) && (preg_match("/^[-_0-9a-z]{2,}$/i", $_POST['gebruikersnaam']))) {
$res = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' && wachtwoord='".$_POST['wachtwoord']."'");
if ($row = mysql_fetch_assoc($res)){
session_start();
setcookie("gebruikersnaam","".$row['gebruikersnaam']."",time()+32140760);
setcookie("wachtwoord","".$row['wachtwoord']."",time()+32140760);
$_SESSION['gebruiker'] = $row['gebruikersnaam'];
$_SESSION['gid'] = $row['id'];
header("Location: index.php?Pagina=berichten");
}
else{
echo "Fout bij het inloggen, controleer je gegevens!";
}
} ?>
<?php
if ( isset ( $_POST [ 'Submit' ] ) && ( preg_match ( "/^[-_0-9a-z]{2,}$/i" , $_POST [ 'gebruikersnaam' ] ) ) ) {
$res = mysql_query ( "SELECT * FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "' && wachtwoord='" . $_POST [ 'wachtwoord' ] . "'" ) ; setcookie ( "gebruikersnaam" , "" . $row [ 'gebruikersnaam' ] . "" , time ( ) + 32140760 ) ; setcookie ( "wachtwoord" , "" . $row [ 'wachtwoord' ] . "" , time ( ) + 32140760 ) ; $_SESSION [ 'gebruiker' ] = $row [ 'gebruikersnaam' ] ;
$_SESSION [ 'gid' ] = $row [ 'id' ] ;
header ( "Location: index.php?Pagina=berichten" ) ; }
else {
echo "Fout bij het inloggen, controleer je gegevens!" ; }
} ?>
Gerard - 15/05/2005 02:21
Ouwe rakker
&& in je query? waar is het woordje AND heen
Bouli - 15/05/2005 04:59 (laatste wijziging 15/05/2005 05:00)
HTML interesse
Citaat:
&& in je query? waar is het woordje AND heen
Scheelt een letter typen he
Ik vind het ook overzichtelijker staan, t.o.v "AND", net als "||" tegen "OR"...
Gesponsorde links
Dit onderwerp is gesloten .