Problem mit Sessionlogin:

Acriss

Gesperrt
Guten Tag,
ich habe mir ein login-system mit Sessions und MySQL geschrieben, und stehe vor folgendem Problem:

Obwohl die Session nicht mehr aktiv ist, kann ich auf bestimmte Seiten zugreifen.

PHP:
session_start():

$member = mysql_real_escape_string($_POST['login']);

$_SESSION['member'] = $member;   
$_SESSION['pass'] = mysql_real_escape_string($_POST['pass']);

$_SESSION['id'] = $row[0];
Da sind meine Sessions.
Wenn ich die auf einer anderen Seite abfrage:
PHP:
session_start();

$id = $_SESSION['id'];

$select = "SELECT Mitglied, Passwort FROM spmembers WHERE id = '$id' ";
$query = mysql_query($select) or die(mysql_error());

while ($row = mysql_fetch_array($query, $connect))
{
$member = $row[0];
$pass = $row[1];
}
if ($_SESSION['pass'] == $pass && $_SESSION['member'] == $member)
{
//blablub
}
else echo 'Ungueltige Session';
Habe ich trotzdem Zugriff auf den inneren Teil.
Ich habe den Browser vorher geschlossen!
 
Sessions sind nicht zwangsweise geschlossen, wenn du den Browser zu machst. Um eine Session sicher zu beenden benutzt du am besten session_destroy().
 
Hmm
könnt ihr denn auf diese Seite?
http://petersilies.pe.funpic.de/sp/Datenbank.php

@Igäl:
Wie soll ich denn mit session_destroy() arbeiten,
wenn das ganze System auf Sessions beruht?

Hmm
ich erhalte folgende Meldung:

Notice: Undefined index: id in line 13

Notice: Undefined index: pass in line 23

Notice: Undefined variable: pass in line 23

Notice: Undefined index: member in line 23

Notice: Undefined variable: member in line 23

line 13:
PHP:
$id = $_SESSION['id'];
line 23:
PHP:
if ($_SESSION['pass'] == $pass && $_SESSION['member'] == $member)

ALso langsam wird das echt blöd... -.-
 
Ah ok tut mir leid. Da hab ich etwas falsch verstanden.

Bei deinen beiden Codeschnipsel die du gepostet hast: Welches Snippet hast du wo?

Kleine Anmerkung: Wenn dein Query nur 1 oder kein Datensatz zurück gibt, brauchst du keine while-Schleife...
 
Snippet?
Ich weiß net was du meinst, aber ich habe ein weiteres Problem:
Anscheinend werden fast alle IFs ignoriert:
Mein Code:

PHP:
<?php
if (isset($_POST['submit']) && !empty($_POST['login']) && !empty($_POST['pass']))
	{
	$member = mysql_real_escape_string($_POST['login']);
	$_SESSION['pass'] = mysql_real_escape_string($_POST['pass']);


	$select = "SELECT id, Mitglied, Passwort, frei FROM spmembers WHERE Mitglied LIKE '$member' ";
	$query = mysql_query($select) or die(mysql_error());

         $_SESSION['member'] = $member;

	while ($row = mysql_fetch_array($query, $connect))
		{

         	$_SESSION['id'] = $row[0];

		$member = $row[1];
		$pass = $row[2];
                 $frei = $row[3];

		global $member;
		global $pass;
                 global $frei;
		}
	if ($_SESSION['member'] == $member && $_SESSION['pass'] == $pass && $frei == 0)
		{
		echo 'Willkommen '.$_SESSION['member'].', <br />';
		echo '<b>Datenbank</b>';
		echo '<br />';
		echo '<a href="Datenbank.php">Eintrag hinzuf&uuml;gen</a>';
		echo '<br />';
		echo '<a href="dbsuche.php">Eintrag suchen</a>';
		echo '<br />';
		echo '<b>Tools</b>';
                 echo '<br />';
                 echo '<a href="rechner.php">Flottenpunkte berechnen</a>';
                 echo '<br />';
		}
         else
	         {
	         echo '<p class="fehler">Achtung: M&ouml;glicherweise war ihr Login und/oder Passwort nicht korrekt oder sie sind noch nicht freigeschaltet!</p>';
	         echo '<br />';
                  echo '<a href="">Nochmal</a>';
	         }
         }
else
	{
         echo '<form method="post">';
         echo '<input type="text" name="login" value="Benutzername" onFocus="this.value=\'\'" /> ';
         echo '<br />';
         echo '<input type="password" name="pass" value="Password" onFocus="this.value=\'\'" /> ';
         echo '<br />';
         echo '<input type="submit" name="submit" />';
         echo '</form>';
         }

Ich kann alles bei Login/Passwort eingeben, es funktioniert immer!
Auch bei 45uwfhjsd08 und ldjfle9a0ß
 
Ich blick' da momentan gar nicht durch!

1. Frage: Sind das Separate Dateien in denen die beiden Codes stehen?
2. Wenn das eine Datei ist oder wenn du die erste Datei in die 2. Includest, warum startest du die Session 2-mal? session_start() am anfang der Hauptdatei dürfte genügen ;)

Auf jeden Fall:

Im ersten Code hast du einen Doppelpunkt und keinen Strichpunkt nach dem Start der Session gemacht:

PHP:
session_start();
und nicht
PHP:
session_start():

Dann woher nimmst du im ersten Code das Array $row ?

Und im 2. Code hast du einen Fehler in der While-Schleife (die Keys im Array stimmen nicht)

statt dem hier:

PHP:
$member = $row[0]; 
$pass = $row[1];

muss dass hier hin:

PHP:
$member = $row['Mitglied']; 
$pass = $row['Passwort'];
 
Hmm
also das $row
nehm ich aus der while Schleife
Außerdem habe ich nun eine Lösung für das Problem:
Session und Variable dürfen nicht gleich sein,
ich habe $member $members genannt, und $pass $passw und jetzt funktionierts :)
 
Und im 2. Code hast du einen Fehler in der While-Schleife (die Keys im Array stimmen nicht)

statt dem hier:

PHP:
$member = $row[0]; 
$pass = $row[1];

muss dass hier hin:

PHP:
$member = $row['Mitglied']; 
$pass = $row['Passwort'];

Afaik kann man auf die Werte die mit mysql_fetch_array geholt werden sowohl wie auf ein assoziatives als auch wie auf ein nummerisches Array zugreifen. Von dem her ist seine Lösung korrekt, deine aber sicherlich übersichtlicher und auch die von mir präferierte.

Ich würde den Query anpassen:
PHP:
	$select = "SELECT id, Mitglied, Passwort, frei FROM spmembers WHERE Mitglied='".$member."' ";
Denn du möchtest ja das Mitglied suchen, dass sich eingeloggt hat. LIKE eignet sich eher für Volltextsuchen.

Dann Frage: Was machst du mit global $member; etc.? Mir erschliesst sich der Sinn nicht.

Hast du mal in einem Echo $_SESSION['member'] und $member nebeneinander ausgegeben?

Ist es vielleicht möglich, dass du register_globals auf on hast und sich die Variablen überschreiben?
 
@Igäl:
Das hab' ich nicht gewusst, aber danke! Mann lernt bekanntlich nicht aus ;)

@Acriss
Ich sehe da die Fehlermeldungen die du vorhin geschrieben hast und Zwei Textfelder (Alianz-Tag und Spieler) sowie ein Button (Anfrage Senden)!
 
Zurück