Ein paar grundsätzliche Fragen - Login : Session

Thomas Lindner

Erfahrenes Mitglied
Hallo Tutorianer,

bevor ich mir doch noch den Revolver nehme und mich mit dem Lauf am Dachfirst aufhänge , versuche ich eine Fragezeichen hier loszuwerden.

Also ich habe so gut we keine Erfahrung mit PHP/MySQL, aber habe es mittlerweiel geschafft das Grundgerüst so weit aufzubauen, die Anmeldedaten per Formular in eine Datenbank zu bekommen und auch von dort wieder auszulesen ( beim auslesen -> Danke @ SirRobin für den Scriptlet ).

Eine Session oder nur die Session ID wird auch schon angelegt und die Werte drinne gespeichert, das alles in einer Seite ( Grundgerüst, mit Include von Content und Loginbereich ).

So, jetzt zu minem Problem opder Missverständnis (?)?

Ich kann auf die Session zugreifen solange ich keinen neuen Inhalt includen lassen, wechsel ich jedoch den Inhalt des include() (ich tausche also nur einen Berewich der Seite aus) ist die Session ID zwar noch bekannt aber nicht mehr die Werte!

Ist die Session nur erneut aufrufbar bei einem Seitenwechsel z.B. von index.php zu wir.php oder auch erhaltbar, wenn ich mit nur einer Seite arbeite und nur jeweils eionen bestimmten Bereich neu includen lasse.

Vielleicht mache ich auch nur irgendwo grundlegend was falsch...

Was mich zudem stutzoig macht, das ich aus verschiedenen Quellen (Netz) entnommen habe, das eine SessionID automatisch an einem Link angefügt wird ( wenn ein gewisser Wert in der php.ini gesetzt ist (den habe ich gesetzt ), aber selbst bei einem Testscript aus:

PhP kurz & gut ( O`Reilly Verlag )

war dem nicht so bei mir.

Ich verzweifel langsam!

Hoffentlich kommen in dieser Woche noch die dem Budget angemessenen wenigen zwei Bücher(chen) die ich mir bei terra-shop geordert habe.

LG

Thomas
 
Hallo,
der Sachverhalt mit den Include-Dateien ist mir noch nicht so richtig klar. Vielleicht kannst Du die Problematik anhand von Code-Auszügen näher erläutern.

Was mich zudem stutzoig macht, das ich aus verschiedenen Quellen (Netz) entnommen habe, das eine SessionID automatisch an einem Link angefügt wird ( wenn ein gewisser Wert in der php.ini gesetzt ist (den habe ich gesetzt ), aber selbst bei einem Testscript aus:

PhP kurz & gut ( O`Reilly Verlag )

war dem nicht so bei mir

Du sprichst wahrscheinlich vom Parameter "session.use_trans_sid". Ist dieser aktiviert, so wird die Session-ID nur dann an die URLs angehängt, wenn Cookies auf dem Client-Browser deaktiviert sind. Diese Methode ist quasi eine Absicherung der Session-Funktionalität für Cookie-Verweigerer :)

mfg, snuu
 
Okay, der Erklärung entnehme ich, das ich Cokkies bei mir deaktivieren müsste um das zu testen. (?)

Hier mal eine Menge Beispiel-Code:

PHP:
<?php

// DATENBANKVERBINDUNG AUFBAUEN

include ("db_abfrage.php");

// DATENABFRAGEN AUS MEMBERTABELLE

$abfrage = "SELECT Username, Passwort, Status 
            FROM member 
            WHERE 
            Username = '$Usr_Name' 
            AND 
            Passwort = '$Usr_Pass'"; 

$result  = mysql_query($abfrage); 

// ABSPEICHERN IN VARIABLEN 
 
list($name, $pass, $status) = mysql_fetch_row($result); 

//SESSION NAME ZUWEISEN UND STARTEN

session_start();
session_register('Username');
session_register('Passwort');
session_register('Group');

$Username = $Usr_Name;
$Passwort = $Usr_Pass;
$Group = $status;


// KONTROLLAUSGABE

echo session_ID() . "<br>";

$A = $_SESSION['Username'] . "<br>";
echo $A;
$B = $_SESSION['Passwort'] . "<br>";
echo $B;
$C = $_SESSION['Status'];
echo $C;


// DATENBANKVERBINDUNG ABBAUEN

// mysql_close($getdata);

// MENÜFUNKTION

if (!isset($goto)) $goto= "home";
if (isset($goto)){
  $datei = "$goto.php";
  if (is_file($datei)){
    $goto = $goto;
  } else {
    $goto = "fehler";
 }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title> 
	<?php
	$text = $goto;
	$text = ucfirst ($text);
	echo " Jobs & Projekte - $text";
	?>
	</title>
<script language="JavaScript1.2" type="text/javascript">
<!--
function change(name,bild)
{
document[name].src = bild
}
//-->
</script>
<script type="text/javascript" language="JavaScript1.2" src="abfrage.js"></script>
<link rel="stylesheet" type="text/css" href="beginn.css" id="css">
</head>
<body>
<table width="760" height="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
    <td rowspan="2" width="145" class="menue" valign="top">
	<table width="145" cellspacing="0" cellpadding="0" border="0">
		<?php
		
		require ("login_screen.php");
		
		?>
		</td>
	</tr>
	<tr>
    	<td>
		<table width="145" cellspacing="0" cellpadding="0" border="0" style="BACKGROUND-COLOR: #fadc91" >
<tr>
    <td class="menueheadline">Navigation</td>
</tr>
 <tr>
    
	<td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	<a href="<?php print"index.php?goto=home"; ?>"><div style="width : 140px; cursor : hand;">Home</div></a>
	

	</td>
	
</tr>
<tr>
    
	<td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	<?php
	if(isset($status)){
		print"<a href=\"index.php?status=$goto=anmeldung\"><div style=\"width : 140px; cursor : hand;\">Acount anmelden</div></a>";
	} else {
	print "<a href=\"?logout\"><div style=\"width : 140px; cursor : hand;\">Logout</div></a>";
	}
	?>
	</td>

</tr>
<?php
if(isset($status)){
	echo "<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	<a href=\"index.php?status=$goto=profil\";><div style=\"width : 140px; cursor : hand;\">User Profil</div></a>
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	<a href=\"index.php?goto=skillcard\"><div style=\"width : 140px; cursor : hand;\">Skill Card</div></a>
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Postfach
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Projekt einstellen
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Jobangebot einstellen
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover=\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Jobgesuch einstellen
	</td>
</tr>


<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover         =\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Projekte durchsuchen
	</td>
</tr>
<tr>
    <td style=\"PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif\" onmouseover         =\"this.bgColor='beige'\" onmouseout=\"this.bgColor='#FADC91'\">
	Jobs durchsuchen
	</td>
</tr>";

} else {
print "";
}
?>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Firmenservice
	</td>
</tr>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Nutzungsregeln
	</td>
</tr>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Netiquette
	</td>
</tr>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Kontakt
	</td>
</tr>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: medium none; FONT-FAMILY: verdana, sans-serif" onmouseover         ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Medidaten
	</td>
</tr>
<tr>
    <td style="PADDING-RIGHT: 2px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 8pt; PADDING-BOTTOM: 2px; CURSOR: hand; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: verdana, sans-serif" onmouseover           ="this.bgColor='beige'" onmouseout="this.bgColor='#FADC91'">
	Impressum
	</td>
</tr>
</table>

		</td>
	</tr>
	</table>
	</td>
    <td valign="top">
	<table width="100%" cellspacing="4" cellpadding="0" border="0" height="145">
<tr>
    <td height="15" class="menue" align="right">
	Jobs &amp; Projekte Datenbank&nbsp;· 
	<?php
	$text = $goto;
	$text = ucfirst ($text);
	echo " Jobs & Projekte - $text";
	?>
	&nbsp;
	</td>
</tr>

<tr>
<td height="105" align="center">
<img src="banner_dummy.jpg" width="468" height="60" border="0" align="baseline" alt="">
</td>
</tr>

<?php
	if($status == '1'){
  	require ("header.php");
	} else {
  	echo("<tr><td height=\"20\" class=\"menue\">&nbsp;</td>");
	}
	?>
</table>
<table cellspacing="2" cellpadding="2" border="0" width=100%  height="100%">
<tr>
    <td valign="top">
	<?php
	require ("$goto.php");
	?>
	</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

An der Stelle wo im Code:

Code:
    <td valign="top">
	<?php
	require ("$goto.php");
	?>
	</td>

steht lasse ich den Content austauschen !

Sprich das Grundgerüst der Seite blkeibt konstant bestehen und nur einzelne Bereiche werden ausgetauscht!

N.S.. Habe schon einiges unrevantes aus dem Code entfernt, aber denoch recht lang - soory!
 
Wegen der Cookies kannst du auch einfach einen Browser nehmen ,der anzeigt ob Cookies gesetzt ,und wenn ja ,mit welchen Inhalt der Mozilla/Firefox macht das z.B.

PHP:
// DATENABFRAGEN AUS MEMBERTABELLE

$abfrage = "SELECT Username, Passwort, Status
            FROM member
            WHERE
            Username = '$Usr_Name'
            AND
            Passwort = '$Usr_Pass'";

$result  = mysql_query($abfrage);
Ich glaube an dieser Stelle hackt es.
Er kuckt nicht nach ,wo der Wert von $Usr_Name & $Usr_Pass vorkommen ,sondern direkt nach den Namen.
Durch die ' werden sie nämlich als String behandelt.
Lass dir doch mal den Query ,pe recho $string; , ausgegben.
PHP:
// DATENABFRAGEN AUS MEMBERTABELLE

$abfrage = "SELECT Username, Passwort, Status
            FROM member
            WHERE
            Username = '".$Usr_Name."'
            AND
            Passwort = '".$Usr_Pass."'";

$result  = mysql_query($abfrage);
So sollte es gehen.
Lass dir nun nocheinmal den Query ausgeben.
Desweiteren benutuzt du in deinem Script(anscheinde) immer die Kurzform der Variablen.
Also anstatt $_GET['goto'] $goto.
Das wuerde ich nicht machen ,denn wen ein bestimmter Eintrag der PHP INI aus ist ,dann bekommst du kein Ergebnis.
Daher bei Variablen immer vorsetzen.
Bei Abfragen von Formularen (Get & POST) Kannst du auhc einfach $_REQUEST verwenden.

Achja du kannst natuerlich auch , deime Session Variable ,solang du PHP nach Version 4.1.0 benutzt so registirern:
$_SESSION["zim"] = "An invader from another planet.";

Das wird als schoener von php.net angeeben.
 
Zuletzt bearbeitet:
Schonmal danke für die bisherigen Antworten und auch im voraus für die die noch folgen...

Werde das alles testen und ja auch nocht weiterlernen!
 
Okay, der Erklärung entnehme ich, das ich Cokkies bei mir deaktivieren müsste um das zu testen. (?)
Richtig :)

Nun zu Deinem Problem: Ich würde die Session-Variablen nicht extra mit session_register() registrieren. Es reicht, wenn Du dem superglobalen Session-Array $_SESSION einen neuen Wert hinzufügst.

PHP:
 $_SESSION['variablenname'] = 'Wert';
Die Zeile registriert automatisch die Variable 'variablenname'. Fügst Du über diese Methode der Session die Variablen für Benutzername, Kennwort und Status hinzu, kannst Du auch bei nachfolgenden Seitenaufrufen auf die Variablen zugreifen. Das hat - so denke ich - nichts mit dem Include des Contents zu tun.

Edit: $Usr_Name und $Usr_Pass sollen ja in der SQL-Anweisung automatisch aus der Session verwendet werden, oder liege ich da falsch? Wenn ja, musst Du sie natürlich auch aus dem Session-Array holen, um sie dort einzufügen.

snuu
 
Zuletzt bearbeitet:
Edit: $Usr_Name und $Usr_Pass sollen ja in der SQL-Anweisung automatisch aus der Session verwendet werden, oder liege ich da falsch? Wenn ja, musst Du sie natürlich auch aus dem Session-Array holen, um sie dort einzufügen.
Dort ist die Session doch noch garnicht gestartet ,wenn ich es Richtg sehe..
Ich denke die Daten kommen per Formular.
 
Die index.php wird ja immer aufgerufen, somit müsste man beim ersten Aufruf die übergebenen Daten in der Session speichern und bei den darauffolgenden Seitenaufrufen die Daten aus der Session verwenden. Vielleicht liege ich auch falsch.

snuu
 
Kurz zur Info falls das für Verwirrung sorgt (?)...


Usr_Name und Usr_Pass stammen aus dem include ( login_sreen.php ), welches auch in der Index vorhanden ist, womit ich die Werte an die Datenbank sende um zu prüfen ob die Daten vorliegen, also der User bereits registriertes Mitglied ist.

Registriert in der Datenbank werden sie bereits vorher über ein Anmeldeformular.

Usr_Name und Usr_Pass sind also die Namen der Inputfelder fürs Einloggen auf der Seite.

In der DB sind diese Werte als Username und Pass gespeichert!

N.S.: Theoretisch brauche ich Username später zur persönlichen Ansprache in vbereschiedenen Unterformularen und außerem um festzustellen ob ein User eingelogt ist oder nur ein Gast auf der Seite ist.

Es veränder sich je nach Zusatnd viele Bestandteile der Seite.

N.S.S.: Ich bin froh überhaupt schon soweit gekommen zu sein, wo das für euch Profis bestimmt Kinkerlitzchen sind ... :)
 
Zurück