Gebruiker wordt niet onhouden
Frederic - 26/04/2005 18:07
PHP ver gevorderde
Ik ben bezig met een bestaand ledensysteem te veranderen, maar iedere keer als ik de browser sluit, en weer open moet ik opnieuw inloggen! De cookies staan zeker aan!
Dit zijn m'n pagina's:
inloggen.php
<?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="<?=$_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><select name="tijd" id="tijd">
<option value="3600" selected>Een uur</option>
<option value="86400">Een dag</option>
<option value="604800">Een week</option>
<option value="2678400">Een maand</option>
<option value="32140800">Een jaar</option>
<option value="32140767859200">Altijd</option>
</select>
(cookies vereist) </td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Inloggen"></td>
</tr>
</table>
</form>
<?php if(isset($_POST['Submit'])) {
$checkg = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
$checkp = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'"),0);
if($_POST['gebruikersnaam'] == "" || $_POST['wachtwoord'] == "") {
$error[] = 'Vul alle velden in!';
}
if($checkg == 0 && $_POST['gebruikersnaam'] != "") {
$error[] = 'De ingevoerde gebruikersnaam is niet geregistreerd.';
}
if($_POST['wachtwoord'] != "" && $_POST['gebruikersnaam'] != "" && $checkp == 0) {
$error[] = 'Het ingevoerde wachtwoord is niet correct.';
}
$fouten = sizeof($error); // aantal errors tellen
if($fouten != 0) { // Er is minstens 1 error
echo 'Kan niet inloggen omwille van de volgende reden(en):';
echo '<ul>';
for($i = 0; $i < $fouten; $i++) {
echo '<li>'.$error[$i].'</li>';
}
echo '</ul>';
} else {
session_start();
$res = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'");
$row = mysql_fetch_assoc($res);
setcookie("gebruikersnaam",$row['gebruikersnaam'],time()+$_POST['tijd']);
setcookie("wachtwoord",$row['wachtwoord'],time()+$_POST['tijd']);
$_SESSION['gebruiker'] = $row['gebruikersnaam'];
$_SESSION['gid'] = $row['id'];
header("Location: index.php");
}
} ?>
<?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="
<?= $_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><select name="tijd" id="tijd">
<option value="3600" selected>Een uur</option>
<option value="86400">Een dag</option>
<option value="604800">Een week</option>
<option value="2678400">Een maand</option>
<option value="32140800">Een jaar</option>
<option value="32140767859200">Altijd</option>
</select>
(cookies vereist) </td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Inloggen"></td>
</tr>
</table>
</form>
<?php if ( isset ( $_POST [ 'Submit' ] ) ) { $checkg = mysql_result ( mysql_query ( "SELECT COUNT(*) FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "'" ) , 0 ) ; $checkp = mysql_result ( mysql_query ( "SELECT COUNT(*) FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "' AND wachtwoord='" . $_POST [ 'wachtwoord' ] . "'" ) , 0 ) ; if ( $_POST [ 'gebruikersnaam' ] == "" || $_POST [ 'wachtwoord' ] == "" ) {
$error [ ] = 'Vul alle velden in!' ;
}
if ( $checkg == 0 && $_POST [ 'gebruikersnaam' ] != "" ) {
$error [ ] = 'De ingevoerde gebruikersnaam is niet geregistreerd.' ;
}
if ( $_POST [ 'wachtwoord' ] != "" && $_POST [ 'gebruikersnaam' ] != "" && $checkp == 0 ) {
$error [ ] = 'Het ingevoerde wachtwoord is niet correct.' ;
}
$fouten = sizeof ( $error ) ; // aantal errors tellen if ( $fouten != 0 ) { // Er is minstens 1 error
echo 'Kan niet inloggen omwille van de volgende reden(en):' ; for ( $i = 0 ; $i < $fouten ; $i ++ ) {
echo '<li>' . $error [ $i ] . '</li>' ; }
} else {
$res = mysql_query ( "SELECT * FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "'" ) ; setcookie ( "gebruikersnaam" , $row [ 'gebruikersnaam' ] , time ( ) + $_POST [ 'tijd' ] ) ; setcookie ( "wachtwoord" , $row [ 'wachtwoord' ] , time ( ) + $_POST [ 'tijd' ] ) ; $_SESSION [ 'gebruiker' ] = $row [ 'gebruikersnaam' ] ;
$_SESSION [ 'gid' ] = $row [ 'id' ] ;
header ( "Location: index.php" ) ; }
} ?>
Sessie.php (wordt op iedere pagina geinclude):
<?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']."'");
if(mysql_num_rows($zoek) > 0) {
while($geg = mysql_fetch_assoc($zoek)) {
session_start();
$_SESSION['gebruiker'] = $geg['gebruikersnaam'];
$_SESSION['gid'] = $geg['id'];
header("Location: ".$_SERVER['REQUEST_URI']);
}
} else {
session_start();
$_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' ] ) ) { }
}
}
?>
En dit is n voorbeeld van een beveiligde pagina:
<?php
if(isset($_SESSION['gebruiker'])) {
?>
<br />
Welkom, <? echo $_SESSION['gebruiker']; ?>
<br />
<ul class="gebruikersmodule">
<li><a href="index.php?Pagina=persoonlijke_statistieken">Persoonlijke statistieken</a></li>
<li><a href="index.php?Pagina=persoonlijke_bestanden">Persoonlijke bestanden</a></li>
<li style="list-style: none;"> </li>
<li><a href="index.php?Pagina=afmelden">Afmelden</a></li>
</ul>
<?php
}
?>
<?php
if ( isset ( $_SESSION [ 'gebruiker' ] ) ) { ?>
<br />
Welkom,
<? echo $_SESSION [ 'gebruiker' ] ; ?> <br />
<ul class="gebruikersmodule">
<li><a href="index.php?Pagina=persoonlijke_statistieken">Persoonlijke statistieken</a></li>
<li><a href="index.php?Pagina=persoonlijke_bestanden">Persoonlijke bestanden</a></li>
<li style="list-style: none;"> </li>
<li><a href="index.php?Pagina=afmelden">Afmelden</a></li>
</ul>
<?php
}
?>
7 antwoorden
Gesponsorde links
klostpret - 26/04/2005 18:10 (laatste wijziging 26/04/2005 18:10)
HTML interesse
Sessie's worden sowieso niet onthouden na sluiten van browser, en session-cookie's worden dus verwijderd na het sluiten vna de browser
Oja: waarom gebruik je meerdere cookie's?
das niet zo handig...
Frederic - 26/04/2005 18:11
PHP ver gevorderde
Maar deze cookies moeten normaal toch behouden blijven? Door in het eerste codevak regel 57 & 58?
klostpret - 26/04/2005 18:13
HTML interesse
Je verwijderd de cookie's toch weer in sessie.php?
Frederic - 26/04/2005 18:18
PHP ver gevorderde
jah, als hij niet is ingelogged (veiligheid)
ikkedikke - 26/04/2005 18:28
PHP expert
dus:
als iemand inlogd zet je cookies
iemand logt uit als hij het venster sluit
je verwijdert cookies als iemand niet ingelogd is
je meot eerst kijken als iemand niet ingelogd is of er cookies aanwezig zijn en pas als daar iets mis mee is de cookies verwijderen
legende - 26/04/2005 19:16 (laatste wijziging 26/04/2005 19:18)
Onbekend
Je moet zo doen:
<?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' ] ) ) { }
}
}
?>
Anders wordt de sessie niet voortgezet, dat dus wel nodig is als je die sessie.php includet.
Frederic - 26/04/2005 19:36
PHP ver gevorderde
Gek, nu ineens wordt er geen cookie meer aangemaakt!
<?php
if(isset($_SESSION['gebruiker'])) {
header("Location: ingelogged.php");
}
?>
<?php
if (IsSet($_GET['melding']))
{
echo "<span style=\"color: #CC0000;\">".$_GET['melding']."</span>";
} ?><form name="inloggen" method="post" action="">
<label for="gebruikersnaam">Gebruikersnaam</label><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="15" <?php if(isset($_GET['gebruikersnaam'])) { ?>value="<? echo $_GET['gebruikersnaam']?>"<?php } ?> />
<label for="wachtwoord">Wachtwoord</label><input name="wachtwoord" type="password" id="wachtwoord" size="15" />
<input type="hidden" name="tijd" value="32140767859200" />
<input type="submit" name="Submit" value="Inloggen" />
</form>
<?php if(isset($_POST['Submit'])) {
$checkg = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
$checkp = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'"),0);
if($_POST['gebruikersnaam'] == "" || $_POST['wachtwoord'] == "") {
$error[] = 'Vul alle velden in!';
}
if($checkg == 0 && $_POST['gebruikersnaam'] != "") {
$error[] = 'De ingevoerde gebruikersnaam is niet geregistreerd.';
}
if($_POST['wachtwoord'] != "" && $_POST['gebruikersnaam'] != "" && $checkp == 0) {
$error[] = 'Het ingevoerde wachtwoord is niet correct.';
}
$fouten = sizeof($error); // aantal errors tellen
if($fouten != 0) { // Er is minstens 1 error
echo 'Kan niet inloggen omwille van de volgende reden(en):';
echo '<ul>';
for($i = 0; $i < $fouten; $i++) {
echo '<li>'.$error[$i].'</li>';
}
echo '</ul>';
} else {
session_start();
$res = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'");
$row = mysql_fetch_assoc($res);
$hoelang = ((time()) + 32140767859200);
setcookie("gebruikersnaam",$row['gebruikersnaam'],$hoelang);
setcookie("wachtwoord",$row['wachtwoord'],$hoelang);
$_SESSION['gebruiker'] = $row['gebruikersnaam'];
$_SESSION['gid'] = $row['id'];
//header("Location: index.php");
}
} ?>
<?php
if ( isset ( $_SESSION [ 'gebruiker' ] ) ) { header ( "Location: ingelogged.php" ) ; }
?>
<?php
if ( IsSet ( $_GET [ 'melding' ] ) ) {
echo "<span style=\" color: #CC0000;\" >" . $_GET [ 'melding' ] . "</span>" ; } ?> <form name="inloggen" method="post" action="">
<label for="gebruikersnaam">Gebruikersnaam</label><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="15"
<?php if ( isset ( $_GET [ 'gebruikersnaam' ] ) ) { ?> value="
<? echo $_GET [ 'gebruikersnaam' ] ?> "
<?php } ?> />
<label for="wachtwoord">Wachtwoord</label><input name="wachtwoord" type="password" id="wachtwoord" size="15" />
<input type="hidden" name="tijd" value="32140767859200" />
<input type="submit" name="Submit" value="Inloggen" />
</form>
<?php if ( isset ( $_POST [ 'Submit' ] ) ) { $checkg = mysql_result ( mysql_query ( "SELECT COUNT(*) FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "'" ) , 0 ) ; $checkp = mysql_result ( mysql_query ( "SELECT COUNT(*) FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "' AND wachtwoord='" . $_POST [ 'wachtwoord' ] . "'" ) , 0 ) ; if ( $_POST [ 'gebruikersnaam' ] == "" || $_POST [ 'wachtwoord' ] == "" ) {
$error [ ] = 'Vul alle velden in!' ;
}
if ( $checkg == 0 && $_POST [ 'gebruikersnaam' ] != "" ) {
$error [ ] = 'De ingevoerde gebruikersnaam is niet geregistreerd.' ;
}
if ( $_POST [ 'wachtwoord' ] != "" && $_POST [ 'gebruikersnaam' ] != "" && $checkp == 0 ) {
$error [ ] = 'Het ingevoerde wachtwoord is niet correct.' ;
}
$fouten = sizeof ( $error ) ; // aantal errors tellen if ( $fouten != 0 ) { // Er is minstens 1 error
echo 'Kan niet inloggen omwille van de volgende reden(en):' ; for ( $i = 0 ; $i < $fouten ; $i ++ ) {
echo '<li>' . $error [ $i ] . '</li>' ; }
} else {
$res = mysql_query ( "SELECT * FROM leden WHERE gebruikersnaam='" . $_POST [ 'gebruikersnaam' ] . "'" ) ; $hoelang = ( ( time ( ) ) + 32140767859200 ) ; setcookie ( "gebruikersnaam" , $row [ 'gebruikersnaam' ] , $hoelang ) ; setcookie ( "wachtwoord" , $row [ 'wachtwoord' ] , $hoelang ) ; $_SESSION [ 'gebruiker' ] = $row [ 'gebruikersnaam' ] ;
$_SESSION [ 'gid' ] = $row [ 'id' ] ;
//header("Location: index.php");
}
} ?>
Ik krijg wel:
Notice: A session had already been started - ignoring session_start() in /usr/local/psa......inloggen.php on line 37
Maar die session start kwam eerder voor in sessie.php he? Echt, ik vind het erg vreemd dat er geen cookie meer komt!
Gesponsorde links
Dit onderwerp is gesloten .