Hauke: Probleme mit Session-ID bei Apache!

Hallo!

Ich habe folgendes Problem.
Und zwar passiert bei dem hier unten aufgeführten Script nich das wie ich es mir gewünscht habe. Und zwar soll dies zur Anmeldung für einen geschützten Bereich einer Internetseite dienen.
Die Daten also Name und Passwort werden aus einer Mysql-DB abgefragt.
Wenn ich mich nun anmelde bekomme ich angezeigt, dass der Login erfolgreich war jedoch nicht weiter. Da wenn ich weiter klicke sofort die sicher_seite.php reagiert und anscheinend die Session-ID nicht finden kann obeohl im tmp-Ordner eine angelegt wird bzw. zu finden ist. Somit gelang ich wieder zurück zur index.
Ich weiß nun nicht mehr weiter.
Was kann ich ändern? Denn auf einen Zugriff per htaccess möchte ich gerne verzichten.

Über Eure Hilfe würde ich mich freuen!

Gruß Hauke

index.php

<?php
session_start();
require("connect.inc.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>- -->Intern<--</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

<body bgcolor="#D3DCFE">

<?php if(!isset($_POST['submit'])) { ?>

<div align="left">
  <table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
      <td width="100%">
        <p align="center"><font face="Verdana" size="5"><u>Intern<br>
        <br>
        </u></font><font face="Verdana" size="4">Dieser Bereich ist NUR registrierten Mitgliedern der FF Negernbötel zugänglich!</font></td>
    </tr>
  </table>
</div>

<form action="<?php $PHP_SELF ?>" method="post">
<table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
  <tr>
    <td bgcolor="#e7e7e7" align="center" colspan="2">
    <b><font size="3"><u>Anmeldung:</u></b></font>
    </td>
  </tr>
  <tr>
    <td width="170" bgcolor="#e7e7e7"><u><b>Benutzername:</b></u></td>
    <td width="230" bgcolor="#ffffff"><input type="text" name="username" size="20" class="input"<?php if($_POST['username'] !=
"" ) {echo' value="'.$_POST['username'].'"';} ?>></td>
  </tr>
  <tr>
    <td width="170" bgcolor="#e7e7e7"><u><b>Passwort:</b></u></td>
    <td width="230" bgcolor="#ffffff"><input type="password" name="password" size="20" class="input"></td>
  </tr>
  <tr>
    <td bgcolor="#e7e7e7" align="center" colspan="2">
    <input type="submit" name="submit" value="Login" class="button">
    </td>
  </tr>
</table>
</form>
<?php
}elseif(!$_POST['username'] || $_POST['username'] == "") {
  echo '<p align="center"><br><br><b><font size="3">Bitte einen Benutzernamen eingeben!</b></font><br><br><a href="index.php">Zurück zur Anmeldung</a></p>';
}elseif(!$_POST['password'] || $_POST['password'] == "") {
  echo '<form action="index.php" method="post">';
  echo '<p align="center"><br><br><b><font size="3">Bitte ein Passwort eingeben!</b></font<br><br>';
  echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
  echo '<br><br><a href="index.php">Zurück zur Anmeldung</a></p>';
  echo '</p>';
  echo '</form>';
}else{
  //$password = md5($password);
  $query = @mysql_query("SELECT benutzername, pass FROM users WHERE benutzername = '".$_POST['username']."'") or die('Select ist
fehlgeschlagen!');
  $result = @mysql_fetch_array($query) or die('<p align="center"><font size="3"><b><br><br>Dieser Benutzername existiert nicht!</b><br><br><a
href="index.php">Zurück zur Anmeldung</a></p>');
  if($password != $result['pass']){
    echo '<form action="index.php" method="post">';
    echo '<p align="center">Passwort ist falsch!<br><br>';
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
    echo '</form>';
    echo '<br><br><a href="index.php">Zurück zur Anmeldung</a></p>';
    die;
  }else{
    $user = $result['user'];
    session_register('user');
    echo '<p align="center"><font size="3"><b><br><br>Der Login war erfolgreich!</b></font><br><br><a href="sichere_seite.php">Weiter</a></p>';
  }
}

echo '<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="100%"><p align="center"><font face="Verdana" size="1">';
echo '<a href="mail/formular4.php">(Zur Registrierung)</a></font></td></tr></table>';

?>

</body>
</html>
--------------------------------------------------------------

connect_inc.php

<?php
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "intern";
$connect = @mysql_connect($dbHost, $dbUser, $dbPass)
or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");
$selectDB = @mysql_select_db($dbName, $connect)
or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen!");
?>
----------------------------------------------------------------

sichere_seite.php

<?php
session_start();
if(!session_is_registered('user') || $_SESSION['user'] == "") {
  header("location:index.php");
  die;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Sichere Seite</title>
</head>
<body>
<table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
  <tr>
    <td bgcolor="#e7e7e7" align="center">
    <?php echo "<b>Hallo ".$_SESSION['user']."</b>"; ?>
    <br><br>
    <b>Hier ist der sichere Inhalt!</b>
    <br><br>
    <a href="neu.php">Neuen Benutzer anlegen</a>
    <br><br>
    <a href="logout.php">LogOut</a>
    </td>
  </tr>
</table>
</body>
</html>
----------------------------------------------------------------

logout.php

<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>LogOut</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?php
$user = $_SESSION['user'];
if(session_destroy()) {
  echo '<p align="center">Bye bye '.$user.'<br><br>Du hast Dich erfolgreich abgemeldet.<br><br><a href="index.php">Zur
Anmeldung</a></p>';
}else{
  echo '<p align="center">Beim Abmelden trat leider ein Fehler auf!<br><br>Bitte schliesse Dein Browserfenster.';
}
?>
</body>
</html>

  1. hi

    if(!session_is_registered('user')

    ich würde sagen hier liegt das problem, aber ich habe im grunde genommen keine ahnung. solche spezial abfrage funktionen haben bei mir nie richtig funktioniert...

    ich würde das ganz einfach so gestalten:
    if($_SESSION[user] && $_SESSION[user]!="")...

    hoffe das hilft^^

    1. Moin!

      if(!session_is_registered('user')

      ich würde sagen hier liegt das problem, aber ich habe im grunde genommen keine ahnung. solche spezial abfrage funktionen haben bei mir nie richtig funktioniert...

      Das dürfte mit ein Grund sein, weshalb von deren Verwendung mittlerweile dringend abgeraten wird. session_register() funktioniert beispielsweise nur bei der sicherheitstechnisch problematischen Einstellung "register_globals = on" in der php.ini. Die Standardeinstellung ist seit PHP 4.2.0 auf "off".

      - Sven Rautenberg

  2. Hello Hauke,

    es fällt sofort auf, dass Du keine saubere Trennung zwischen

    • includes
    • Deklarationen (Konstanten und auch Variablen, obwohl das bei PHP auch
                       ohne geht...)
    • Definitionen  (Funktionen)
    • "Hauptprogramm"
    • Ausgabebereich

    hältst. Deshalb steigt man nicht durch durch dein Script. Zur Fehlrsuche sollte es schließlich auch egal sein, ob der Ausgabefont Verdana heißt oder grün sein soll.

    Trenne die Aufgaben im Script streng, dann bleiben für den Fehler nur ein paar Zeilen übrig und Du findest ihn sofort.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen