Frage zu Login-System mit Sessions

M-P

Mitglied
Also entweder ich bin total bescheuert; aber wenn man dass Script komplett übernimmt und auf formular.php geht funktioniert das ja gar nicht mit der Weiterleitung zu intern.php

Ich habe deswegen das so abgeändert:

Formular(LOGIN SEITE)

PHP:
<?php session_start (); ?>
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig."; 
} 
?>  
<?php
	
	if( empty ($_POST['Email']) or empty ($_POST['Passwort']))
{
	if( $_POST["Kontrolle"] == 1)
	{
	echo "Die Zugangsdaten waren ungültig.";	
	}
	
echo ' 

<form method="post" action="">

<table>
    	<tr>
    	<td>E-Mail Adresse:</td>
        <td><input type="text" name="Email" value="'.$_POST['Email'].'" /></td>
    </tr>
    <tr>
    	<td>Passwort:</td>
        <td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />
		<input type="hidden" name="Kontrolle" id="Kontrolle" value="1"/></td>
    </tr>
     <tr>
    	<td colspan="2">
        <input type="submit" name="submit" value="Registrieren" />
		
        </td>
    </tr>
</table>

</form>

';
}
else
{
	
	
	if ($_POST['submit'])
	{	
 	 header ("Location: login_check.php");
	}

}
?>

LOGIN_CHECK

PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include 'config.php';

$sql = "SELECT ". 
    "Id, Vorname, Nachname, Email ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Email like '".$_REQUEST["Email"]."') AND ". 
    "(Passwort = '".md5 ($_REQUEST["Passwort"])."')"; 
$result = mysql_query ($sql); 

if (mysql_num_rows ($result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["Id"]; 
  $_SESSION["user_nickname"] = $data["Email"]; 
  $_SESSION["user_nachname"] = $data["Nachname"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 

  header ("Location: intern.php"); 
} 
else
{ 
  header ("Location: login.php?fehler=1"); 
}  
?>

Intern
PHP:
<?php 
include ("check_user.php"); 
?> 
<html> 
<head> 
  <title>Interne Seite</title> 
</head> 
<body> 
  BenutzerId: <?php echo $_SESSION["user_id"]; ?><br> 
  Nickname: <?php echo $_SESSION["user_nickname"]; ?><br> 
  Nachname: <?php echo $_SESSION["user_nachname"]; ?><br> 
  Vorname: <?php echo $_SESSION["user_vorname"]; ?> 
  <hr> 
  <a href="logout.php">Ausloggen</a> 
</body> 
</html>

check_user

PHP:
<?php 
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: login.php?fehler=1"); 
} 
?>

Logout

PHP:
<?php 
// Wird ausgeführt um mit der Ausgabe des Headers zu warten. 
ob_start (); 

session_start (); 
session_unset (); 
session_destroy (); 

header ("Location: login.php"); 
ob_end_flush (); 
?>

Mir wird die ganze Zeit angezeigt, dass ich ich die falschen Zugangsdaten angegeben hab. Hab mehrmals neue User erstellt also dadran kann es nicht liegen.
 
Zuletzt bearbeitet:
Was sagt denn ein var_dump($_POST); auf der Seite, die den Login prüft?
Sind die Passwörter auch als MD5-Hash in der Tabelle oder im Klartext?
 
Was sagt denn ein var_dump($_POST); auf der Seite, die den Login prüft?
Sind die Passwörter auch als MD5-Hash in der Tabelle oder im Klartext?

sind als MD5-Hash in der Tabelle

var_dump:

string(128) "SELECT Id, Vorname, Nachname, Email FROM benutzerdaten WHERE (Email like '') AND (Passwort = 'd41d8cd98f00b204e9800998ecf8427e')"


bedeutet: Keine Email eingelesen?!
 
Zuletzt bearbeitet:
Hast du das überprüft?

jap s.o. (falls ichs richtig gemacht habe)
Ich glaube ich habe den Fehler gefunden aber ich weiß nicht warum er sntsteht:

Ich habe mir mit echo auf der login_check seite mal das PW und Email ausgeben lassen aber da kommt nichts; also wird dass nicht an die Seite weitergegeben aber warum?




Es klappt jetzt; aber nur weil ich den kompletten Code von check_user in die Login.php reinkopiert habe. Aber es muss doch auch möglich sein in 2 Dateien?!
 
Zuletzt bearbeitet:
Hallo M-P,

ich weiss jetzt nicht genau ob das Problem schon gelöst ist, oder ob ich bei den Posts die schon vorhanden sind, was übersehen habe. Aber das ganze nur überflogen.

Die Sache ist die, wenn du eine Session erstellst und eine neue PHP- Datei aufrufst, muss natürlich auch der neuen PHP - Datei diese übergeben werden. Dazu gibt es grundsätzlich 2 Möglichkeiten.

1. Per URL-Übergabe (Post/Get), Ist aber eher unschön, hat aber den vorteil, wenn variante 2 nicht funktioniert.
2. Über ein Cookie. Dies wird im Regelfall, selber angelegt. Aber wenn im Browser die Sicherheitseinstellung entsprechend hoch sind, halt nicht. Dann kann das zweite Skript nichts von der Session wissen. Ob das Cookie angelegt wird kannst du ja lokal nachgucken.

mfg
Andre
 
Hallo M-P,

ich weiss jetzt nicht genau ob das Problem schon gelöst ist, oder ob ich bei den Posts die schon vorhanden sind, was übersehen habe. Aber das ganze nur überflogen.

Die Sache ist die, wenn du eine Session erstellst und eine neue PHP- Datei aufrufst, muss natürlich auch der neuen PHP - Datei diese übergeben werden. Dazu gibt es grundsätzlich 2 Möglichkeiten.

1. Per URL-Übergabe (Post/Get), Ist aber eher unschön, hat aber den vorteil, wenn variante 2 nicht funktioniert.
2. Über ein Cookie. Dies wird im Regelfall, selber angelegt. Aber wenn im Browser die Sicherheitseinstellung entsprechend hoch sind, halt nicht. Dann kann das zweite Skript nichts von der Session wissen. Ob das Cookie angelegt wird kannst du ja lokal nachgucken.

mfg
Andre
Danke für deine Antwort. Ich habe Ja die POST Methode benutzt wie du in meinem Formular siehst hat trotzdem nicht geklappt.
 
Login Script mit Weiterleitung

Also ich habe ein Login-Script mit Weiterleitung gecoded, aber hab irgend ne Kleinigkeit geändert und ich kann mich nicht mehr einloggen.

LOGIN.php
PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php session_start (); ?>
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo '<font color="grey">Die Zugangsdaten sind ung&uuml;ltig.</font><br>' ;
  echo '<font color="grey">Bitte noch einmal probieren oder an den'.' <a target="_parent" href="kontakt.php"><font color="#0099CC">Support</font></a> wenden.</font>'; 
} 
?>  
<?php

	
	if( empty ($_POST['Email']) or empty ($_POST['Passwort']))
{
	if( $_POST["Kontrolle"] == 1)
	{
	echo '<font color="grey">Beide Felder m&uuml;ssen ausgef&uuml;llen werden.</font>';	
	}
	
echo ' 

<form class="clearfix" method="post" action="">

<table>
    	<tr>
    	<td><font color="grey">E-Mail:</font></td>
        <td><input type="text" name="Email" value="'.$_POST['Email'].'" /></td>
    </tr>
    <tr>
    	<td><font color="grey">Passwort:</font></td>
        <td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />
		<input type="hidden" name="Kontrolle" id="Kontrolle" value="1"/></td>
    </tr>
     <tr>
    	<td colspan="1">
        <input type="submit" name="submit" value="Log-In" />
		</font>
        </td>
				<td>
		<a href="pwvergessen.php"><font color="#0099CC">Passwort vergessen</font></a>
		</td>
    </tr>



</table>

</form>

';
}
else
{
	
	
	if ($_POST['submit'])
	{	
 	 
 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include 'config.php';

//SQL INJECTION Abwehr
$Email = stripslashes($Email);
$Passwort = stripslashes($Passwort);
$Email = mysql_real_escape_string($Email);
$Passwort = mysql_real_escape_string($Passwort);


$sql = "SELECT ". 
    "Id, Vorname, Nachname, Email, Anmeldedatum, Person, Lastlogin, Aktivierung". 
  " FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Email like '".$_REQUEST["Email"]."') AND ". 
    "(Passwort = '".md5 ($_REQUEST["Passwort"])."')"; 
$result = mysql_query ($sql); 


if (mysql_num_rows ($result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result); 
if($data["Aktivierung"]==1) ///Ist aufjedenfall auf 1 gesetzt!
{
  // Sessionvariablen erstellen und registrieren 
  $Nachname = utf8_encode($data["Nachname"]); 
  $Vorname = utf8_encode($data["Vorname"]); 
  $_SESSION["user_ip"] = $_SERVER['REMOTE_ADDR'];
  $_SESSION["user_id"] = $data["Id"]; 
  $_SESSION["user_nickname"] = $data["Email"]; 
  $_SESSION["user_nachname"] = $Nachname; 
  $_SESSION["user_vorname"] = $Vorname; 
  $_SESSION["user_anmeldedatum"] = $data["Anmeldedatum"]; 
  $_SESSION["user_person"] = $data["Person"]; 
  $_SESSION["user_lastlogin"] = $data["Lastlogin"];
  
$Lastlogin=date("j.n.Y")." um ".date("H:i:s");
$UPDATELASTLOGIN = "update benutzerdaten set Lastlogin='".$Lastlogin."' where Email='".$_REQUEST["Email"]."'";
mysql_query($UPDATELASTLOGIN);

  $_SESSION["user_lastlogin_support"] = $Lastlogin;




  header ("Location: weiterleitung.php"); 
}
else
{
	echo "Email muss noch bestätigt werden.";	
}
} 
else
{ 
	 header ("Location: login.php?fehler=1"); 
  
}  

	}

}
?>

Intern.php
PHP:
<?php 
include ("check_user.php"); 
?> 
<html> 
<head> 
  <title>News</title> 
<style type="text/css">
<!--
.Header {
	text-align: right;
}
-->
</style>
</head> 
<body topmargin="0">
  <table width="100%" border="0" cols="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="100%"><?php 
include ('header.php'); 
?> </td>
    </tr>
          <tr>
    <td valign="top"><h1 align="center">News</h1>
    <p>Weitere Mitarbeiter werden gesucht. </p></td>
    </tr>
      </table></td>
    </tr>
    <tr>
      <td><?php 
include ('footer.php'); 
?></td>
    </tr>
  </table>
  <p>&nbsp;</p>
  <h1 align="center">&nbsp;</h1>
</body> 
</html>

check_user.php
PHP:
<?php 
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: login.php?fehler=1"); 
} 
?>
ERLEDIGT geht wieder hab zwei Sessions gestartet;deswegen gings nicht!
Im Header und Footer ist fast nur HTML drin also liegts dadran nicht.
Ich werde immer von check_user.php auf meine Login-Seite mit Fehler geschickt.
Ich hab die Weiterleitung mit echo $_SESSION["user_id"]); ersetzt und es wird auch keine ID angezeigt?!


Das ist meine verbleibende Frage

Zudem wollte ich fragen ob es unsicher ist sich so einloggen zu können?Könnte man nicht mit einem Cookie Faker z.b. einfach eine user_id erstellen?
Natürlich besser gehts immer aber ich wills natürlich nicht jedem leicht machen!*g*


;-)
 
Zuletzt bearbeitet:
Zurück