Hallo,

Ik probeer nu al enkele dagen een eenvoudig login systeem te implementeren, maar ik stuit altijd op hetzelfde probleem: mijn sessievariabelen blijken telkens niet te bestaan als ik de pagine tracht te laden vanop een andere pc in het lokaal netwerk.

Mijn script bestaat uit drie bestanden: Loginpagina.php, VerifieerLoginGegevens.php en Memberpagina.php.
Ik heb voor enkele beveiligingsmethoden een tutorial van hier gebruikt: http://www.phphulp.nl/php/tutorials/10/38/
over Sessies en veiligheid.

Als ik de code uitvoer vanop http://localhost/loginpagina.php dan werkt alles perfect.
Hoe krijg ik dit eenvoudig systeem aan de praat zodat ik het kan uitvoeren vanop http://mijnpcnaam/loginpagina.php

Als gebruikersnaam en paswoord moet je 'demo' en 'test' gebruiken. Deze variabelen vind je ook terug in de script VerifieerLoginGegevens.php

Hier volgen de scripts:

<?php
session_start();
//Loginpagina.php
?>
<html>
<head>
<title>ICT Alumni</title>
</head>
<body>
<form name=loginformulier action=VerifieerLoginGegevens.php method=post>
<table width=100%>
<tr>
<td colspan=2>
<?php
if(isset($_GET['message']))
{
if($_GET['message'] == 'Foute_login')
{
echo "Foute login! Controlleer uw logingegevens en probeer opnieuw<br>";
}
else
{
echo "Er is een fout opgetreden! Controlleer uw logingegevens en probeer opnieuw<br>";
}
}
else
{
echo "U dient eerst in te loggen<br>";
}
?>
</td>
</tr>
<tr>
<td>
Login
</td>
<td>
<input type=text name=loginnaam>
</td>
</tr>
<tr>
<td>
Paswoord
</td>
<td>
<input type=password name=loginpaswoord>
</td>
</tr>
<tr>
<td></td>
<td>
<input type=submit value=Inloggen>
</td>
</tr>
</table>
</form>
</body>
</html>

-------------------------------------

<?php
//VerifieerLoginGegevens.php
session_start();
if(!isset($_POST['loginnaam']) || !isset($_POST['loginpaswoord']))
{
session_destroy();
die("loginnaam of loginpaswoord zijn niet gepost");
}
else
{
if($_POST['loginnaam'] == 'demo' && $_POST['loginpaswoord'] == 'test')
{
$_SESSION['loginnaam'] = $_POST['loginnaam'];
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$sessdata_str = serialize($_SESSION);
$md5hash = md5($sessdata_str);
$_SESSION['hash'] = $md5hash;
header("Location: Memberpagina.php");
}
else
{
header("Location: Loginpagina.php?message=Foute_login");
}
}
?>

-------------------------------------------

<?php
//Memberpagina.php
session_start();
if(!isset($_SESSION['loginnaam']))
{
die("Loginnaam bestaat niet in de sessie");
}
else
{
if(!isset($_SESSION['ip']))
{
die("ip bestaat niet in de sessie");
}
else
{
if($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
{
echo ("Het ip-adres (" .$_SESSION['ip'].") klopt en loginnaam (".$_SESSION['loginnaam'].") is ingevuld!");
//verdere controle op de hash
if(!isset($_SESSION['hash']))
{
die("hash bestaat niet in de sessie");
}
else
{
$sessdata = $_SESSION;
unset($sessdata['hash']);
$sessdata_str = serialize($sessdata);
$md5hash = md5($sessdata_str);
if($_SESSION['hash'] == $md5hash)
{
echo ("hash (".$_SESSION['hash'].") is ok");
}
else
{
echo ("Er is een fout opgetreden: hash (".$_SESSION['hash'].")");
}
}
}
else
{
echo ("Er is een fout opgetreden: ip-adres (".$_SESSION['ip'].") en loginnaam (".$_SESSION['loginnaam'].")");
}
}
}

?>

Iedereen bedankt die de moeite neemt om mij te helpen.

mvg,

Ward
Zou er iets mis kunnen zijn met mijn configuratie van php of the webserver (apache)?
Het zou kunnen dat het te maken heeft met de cookie die php plaats over de PHPssid maar dat weet ik niet zeker.
Wat ik merkte was dat op de server bij de sessiedata een leeg bestand werd gemaakt met de sessionidentifier. Maar ik weet niet waarom. In het correct werkend geval bestonden in deze sessiedata bestand 3 variabelen: 'loginnaam', 'ipadres' and 'hash'
$obj_start (of ob_start) wil ook nog wel eens werken
ob_start vind ik altijd een mickeymouse oplossing voor dit soort dingen. Als je volgorde en je controles op vars kloppen met de juiste afhandelingen, kan je alles zonder doen.

/ot ob_start gebruik ik enkel en alleen om output te echoen in een sleep

Reageren