login mit session_id läuft net!

Ich hab das so!

Hallo oppa,

vielen Dank, dass Du uns Deine Hilfe anbietest:

Ich hab das System bei mir wie unten angezeigt: Hier nur dass was zum login-system gehört, habe dann noch weitere Tabellen die hier ja aber unwichtig sind:

Der Inhalt der admin.php soll in einer Tabelle der index.php angezeigt werden.
In dieser Tabelle steht folgender Code:

---------------------------------------------------------------
<?php
$admin=$_GET['admin'];
if(file_exists($admin.".php") or $admin==""){
if(empty($admin) or $admin=="admin"){include("admin.php");}
else{include($admin.".php");}
}
else{echo "Die Datei existiert nicht.";}
?>
-----------------------------------------------------


index.php,


PHP:--------------------------------------------------------------------------------
<?php

session_start();

include("connect2db.inc.php");
include("usermanagment.inc.php");

if (isset($_POST['action']) && $_POST['action']=='login')
{
$un = (isset($_POST['un'])) ? $_POST['un'] : '';
$pw = (isset($_POST['pw'])) ? $_POST['pw'] : '';
CheckUserLogin ($un, $pw, session_id());
}

if (isset($_GET['action']) && $_GET['action']=='logout')
{
UserLogout (session_id());
}

?>

<br>
<form name="login" method="post" action="index.php">
<input type="hidden" name="action" value="login">
Enter your username and password to log in
<br>
Username:&nbsp;</td><td><input class="flat" type="text" name="un"><br>
Password:&nbsp;</td><td><input class="flat" type="password" name="pw"></br>
<input type="submit" value="Login">
</form>
--------------------------------------------------------------------------------


admin.php

PHP:--------------------------------------------------------------------------------
<?php

session_start();
include("connect2db.inc.php");
include("usermanagment.inc.php");

$userinfo = CheckUserSession(session_id());

// hier gehts dann weiter, wenn alles ok ist .. <img src="images/smilies/smile.gif" border="0" alt="">

// logout button
?>
<a href="index.php?action=logout">Logout<br><?php echo $userinfo[Vorname]." ".$userinfo[Name]; ?></a>
--------------------------------------------------------------------------------


und zum schluss noch die datei usermanagment.inc.php


PHP:--------------------------------------------------------------------------------
<?php

/***
* Prüfen, ob der User berechtigt ist, einen Login durchzuführen.
*/

function CheckUserLogin ($un, $pw, $session) {
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserPasswd FROM AdminUser WHERE UserName='$un' AND UserPasswd=MD5('$pw')") or mysql_error();
$zeile = mysql_fetch_array($result);

if ( $zeile["UserId"] == "" )
{
header ("Location: index.php");
}
else
{
$result = mysql_query("UPDATE AdminUser SET UserSession = '".$session."',UserLogin = NOW() WHERE UserId = '".$zeile["UserId"]."'") or mysql_error();
header ("Location: admin.php");
}
}


/***
* LOGOUT
*/

function UserLogout ($session) {
$result = mysql_query("UPDATE AdminUser SET UserSession = NULL WHERE UserSession = '".$session."'") or mysql_error();
header ("Location: index.php");
}


/***
* Prüfen, ob die Session in Ordnung ist.
*/

function CheckUserSession ($session) {
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserLogin FROM AdminUser WHERE UserSession = '".$session."'") or mysql_error();
if ( mysql_num_rows($result) == 1 ) {
$zeile = mysql_fetch_array($result);
$sessarr[UserId] = $zeile["UserId"];
$sessarr[Name] = $zeile["Name"];
$sessarr[Vorname] = $zeile["Vorname"];
$sessarr[UserLogin] = $zeile["UserLogin"];
return $sessarr;
}
else {
header ("Location: index.php");
return false;
}
}

?>

Tja, irgendwie klappt das alles immer nicht, bekomme immer die Meldung "headers already sent....."
 
hmm, das sieht ja schonmal ganz vielversprechend aus.

hier hast du erstmal das form. incl. login über die mysql datenbank:

PHP:
<html>
<head>
<title>Ihre Autohaus Daten</title>
</head>
<body>
<!---start formular --->

<form action="<?=$PHP_SELF?>" method="Get">

<p>
  <input type="text" name="SEINNAME" size="20"></p>
  <p><input type="text" name="PASSINP" size="20"></p>
  <p><input type="submit" value="Login" name="abschicken"></p>
  <p>Password vergessen? Hier klicken!</p>
  <input type="reset" value="Zurücksetzen" name="B2">
</p>

</form>
</body>
</html>




<?

if ($abschicken == "Login")
{    //IF1

include ('php/connect.php');

   $ergebnis = @mysql_query("SELECT * FROM AH_AG_USER_LOGIN where NAME Like '$SEINNAME'" );
   if(!$ergebnis) {
   echo("<p>Datenbank Fehler, bitte versuchen Sie es später erneut." .  mysql_error() . "</p>");
   exit();

  }

   while ( $row = mysql_fetch_array($ergebnis))
    {
    $NAME1       = $row["NAME"];
    $PASSWORD1   = $row["PASSWORD"];
    $ID1         = $row["ID"];
    }





if ($SEINNAME != $NAME1)
   {
   echo("Diesen Benutzernamen gibt es nicht<BR>");
   }
 if ($PASSINP != $PASSWORD1)
   {
   echo("Dieses Passwort ist leider falsch");
   }
   if ($SEINNAME == $NAME1 && $PASSINP == $PASSWORD1)
   {
   echo("Alles klar, du bist drin!");
   }

}   // IF1
?>

##
ich werd mir jetzt mal dein script angucken und sehen wie wir das am besten zusammenfügen können....
 
Re: Ich hab das so!

Original geschrieben von piumer
Tja, irgendwie klappt das alles immer nicht, bekomme immer die Meldung "headers already sent....."
Ich darf zitieren:

Ich bekomme die Fehlermeldung "cannot add header information", was mache ich falsch?

Diese Fehlermeldung wird ausgegeben, wenn versucht wird, ein Cookie zu setzen, eine Session zu starten oder per Header auf eine andere Seite weiterzuleiten, zuvor allerdings schon HTML Code an den Browser geschickt wurde. Entweder ihr stellt nun euren Code dementsprechend um oder ihr benutzt die Funktion ob_start() in Verbindung mit ob_end_flush().


Quelle:
http://www.tutorials.de/tutorials128581.html

** edit **
Hier gibts auch ein Tutorial zum Thema Login mit Sessions von Karl Förster.
 
Zuletzt bearbeitet:
Das kenne ich auch schon

Das von Karl Förster habe ich auch schon probiert, hatte auch das Problem mit "headers already sent", obwohl ich das genau so übernommen habe.

Naja, ich denke, es wäre jetzt am besten, wir nehmen vielleicht das Login von Benski, und versuchen dort jetzt die sessions mit reinzusetzen.

Ich denke das zu kombinieren ist etwas schwierig, weil das schonmal vom Aufbau ganz verschiedene Dinge sind.

Oder, was meint Ihr?

@benski: Hier meine ICQ-Nr: 292485886
 
Zuletzt bearbeitet:
vielleicht hilft das ...

Hi !

Also benksy, gehen wir mal in deinen Code:
PHP:
if ($SEINNAME == $NAME1 && $PASSINP == $PASSWORD1) 
   { 
   echo("Alles klar, du bist drin!"); 
   }
Dort müsstesst du ja nun eine Weiterleitung reinbauen, die den User in den geschützen
Bereich führt.
Ich würde es so lösen:
PHP:
if ($SEINNAME == $NAME1 && $PASSINP == $PASSWORD1) 
   {
  session_start(); 

  $sid = session_id();
  $sess_ip = $REMOTE_ADDR; // Ermitteln der IP des Users

  session_register('seinname'); // Speichern des Usernamens in der Session
  session_register('sess_ip');  // Speichern der IP  in der Session

  echo("Alles klar, du bist drin!");

  // Nun die Weiterleitung
  echo "<meta http-equiv='refresh' content='2;URL=geschützte_seite.php?PHPSESSID=$sid'>";
}

// nun musst du auf jede Seite ganz an den Anfang das hier packen:
<?
session_start();
include("secure.php"); // Eine kleine Kontrolldatei
?>

Aber immer drauf achten, dass du eben die Session-ID übergibt (wie z.B. bei der Weiterleitung)

Hier nun der Inhalt der secure.php:

PHP:
<? 
session_start(); 
$akt_ip = $REMOTE_ADDR;

if ($akt_ip != $sess_ip){
    echo "<meta http-equiv='refresh' content='0;URL=fehlerseite.php;'>";
    }

?>

Die Funktion dieser Datei ist einfach: Sollte die Session durch einen blöden Zufall noch
bestehen und jemand geht auf eine geschützte Seite, wird diese Session gestartet,
jedoch wird die aktuelle IP anders sein als die in der Session gespeicherte.
Ob das nun das Non-Plus_ultra ist weiß ich nicht, ich kann nur sagen das
es bei mir wunderbar funktioniert.
 
Damit ihr auch für die Zukunft arbeitet und euch keine veralteten Arbeitsweisen angewöhnt, hier mal die etwas aktuellere Schreibweise:
PHP:
if ($SEINNAME == $NAME1 && $PASSINP == $PASSWORD1) 
   { 
  session_start(); 

  $sid = session_id(); 

  $_SESSION['seinname'] = $SEINNAME; // Speichern des Usernamens in der Session 
  $_SESSION['sess_ip'] = $_SERVER['REMOTE_ADDR'];  // Speichern der IP  in der Session 

  echo("Alles klar, du bist drin!"); 

  // Nun die Weiterleitung 
  echo "<meta http-equiv='refresh' content='2;URL=geschützte_seite.php?PHPSESSID=$sid'>"; 
}
 
Was is denn nun wieder?

Ich habe jetzt erstmal das Login von benski eingebaut , und da haperts bei mir schon wieder:

Ich habe in einer Tabelle meiner index.php das Formular und in einer anderen Tabelle das Script mit Datenbankabfrage.

Er müsste mir doch jetzt die echos bei Login (Benutzer gibt es nicht, Passwort ist falsch usw.) in der Tabelle ausgeben, in der das Script steht!

Aber es passiert wieder gar nix Ausser dass die Variablen mit dem Inhalt, die ich im Loginformular angegeben habe (also Benutzername und Passwort) an die URL angehängt wurden.

Das sagt mir doch, dass ich eigentlich eingeloggt bin, es kommt ja auch kein SQL-Fehler oder sonstwas! Doch warum gibt er die entspr. echos nicht aus



:(
 
..also ich hab jetzt am wochenende leider wenig zeit weil sich meine server vollkommen verabschiedet haben ;(

aber ab heute abend oder sonst morgen kanns dann los gehen.

@helper's : erst mal vielen dank für eure posts.

@piumer: bist du denn sicher das deine SQL abfrage wirklich richtig funktioniert`?

denn daran liegt es meistens. versuch doch erstmal in nem anderen script die die $Var mit echo ausgeben zu lassen. vielleicht hast du dich auch verschrieben?!

ich guck mir deine sachen mal an sobald ich zeit habe.

poste sie doch in der zeit schonmal hier das ich sie ausprobieren kann..

gruß an alle Helfer..
 
Hier

Ok, ich probier das nochmal mit den $Var´s. Vielleicht klappt ja was mit meiner angepassten connect2db.inc.php oder so. Hier erstmal mein Code:

Das steht in der index.php in der Tabelle, in der die Echos ausgegeben werden:
Code:
      <?
if ($abschicken == "Login")
{    //IF1
include ('connect2db.inc.php');

   $ergebnis = @mysql_query("SELECT * bsweb_user where NAME Like '$SEINNAME'" );
   if(!$ergebnis) {
   echo("<p>Datenbank Fehler, bitte versuchen Sie es später erneut." .  mysql_error() . "</p>");
   exit();

  }

   while ( $row = mysql_fetch_array($ergebnis))
    {
    $NAME1       = $row["NAME"];
    $PASSWORD1   = $row["PASSWORD"];
    $ID1         = $row["ID"];
    }
if ($SEINNAME != $NAME1)
   {
   echo("Diesen Benutzernamen gibt es nicht<BR>");
   }
if ($PASSINP != $PASSWORD1)
   {
   echo("Dieses Passwort ist leider falsch");
   }
   if ($SEINNAME == $NAME1 && $PASSINP == $PASSWORD1)
   {
   echo("Alles klar, du bist drin!");
   }
}   // IF1
?>
Hier meine Formular-Tabelle:
Code:
<td width="159" height="125" valign="top"> <form action="<?=$PHP_SELF?>" method="Get">
              <table width="158" border="0" bgcolor="#D3D4D9">
                <!--DWLayoutTable-->
                <tr> 
                  <td width="6">&nbsp;</td>
                  <td width="137" valign="bottom"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Benutzer</font></td>
                  <td width="10">&nbsp;</td>
                </tr>
                <tr> 
                  <td>&nbsp;</td>
                  <td> <div align="left"> 
                      <input class="flat" type="text" name="SEINNAME" size="10" maxlength="10" />
                    </div></td>
                  <td>&nbsp;</td>
                </tr>
                <tr> 
                  <td>&nbsp;</td>
                  <td valign="bottom"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kennwort</font></td>
                  <td>&nbsp;</td>
                </tr>
                <tr> 
                  <td>&nbsp;</td>
                  <td> <div align="left"> 
                      <input class="flat" type="password" name="PASSINP" size="10" maxlength="10" />
                      <input type="submit" value="Login" name="abschicken"/>
                    </div></td>
                  <td>&nbsp;</td>
                </tr>
                <tr> 
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                </tr>
              </table>
            </form></td>
Und hier die connect2db:
Code:
<?php
/********************* Definitionen für DB-Connect's ******************/
$DB[host]    = "localhost";
$DB[user]    = "user";
$DB[passwd]  = "passwd";
$DB[dbname]  = "mysql";
/**********************************************************************/
@mysql_connect( $DB[host] , $DB[user] , $DB[passwd] );
@mysql_select_db( $DB[dbname] ) or die("Unable to select database");
/**********************************************************************/
?>
Im Grunde also nur etwas meiner Site angepasst:

Hier noch meine SQL-Tabelle, die ich nach Deinem Script eingerichtet habe:
Code:
# 
# Datenbank: `mysql`
# 

# --------------------------------------------------------

#
# Tabellenstruktur für Tabelle `bsweb_user`
#

CREATE TABLE `bsweb_user` (
  `ID` int(11) NOT NULL auto_increment,
  `NAME` varchar(20) NOT NULL default 'NAME',
  `PASSWORD` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `NAME` (`NAME`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
 
Muss an meiner Site liegen!

Also, ein Kumpel hat mal an dem Login-System, daß ich vorher hatte, mit usermanagment.inc.php usw mal etwas rumgebastelt und eine testseite erstellt.

Diese habe ich bei mir ausprobiert, und da funktioniert es alles wunderbar.

Dann habe ich wieder versucht, das in meiner Site entsprechend einzusetzen und da hapert es halt wieder. Es kommt keine Fehlermeldung, weder seitens SQL noch seitens sessionfehler!

Das heisst also, irgendwie muss es an meiner Site liegen, die sich da quer legt.

Ich glaube, das JavaScript, für den Preloader der Rolloverbilder, welches von Dreamweaver kommt, ist nicht schuld, das habe ich mal rausgelassen und hat nichts geändert.

Liegt es vielleicht an dem PHP-Script, mit dem ich meine Dateien in eine Tabelle include? Probier ich gleich mal! Für sonstige Tips wäre ich dankbar!
 
Zurück