Kurioser Fehler - Wer hat so etwas schon mal erlebt?

olly1882

Mitglied
Hallo zusammen,

ich habe ein Problem, dem ich seit 2 Tagen keine Lösung finde. Ich ahbe eine Sessionverwaltung selbst geschrieben.
PHP:
<?php
	require ("c:/hfm_verbindungen.inc.php");
	// Verbindung zur Datenbank aufbauen
	$cnx_ses = $wdefsql;
	
	// ID auslesen
	$ID = $_GET[ID];
	$zeit = time();
	
	// abgelaufene Sessions und Tabellenleichen entfernen
	$sql_a = "DELETE FROM ses_session WHERE (anmeldezeit + anmeldedauer) < '".$zeit."'";
	odbc_exec( $cnx_ses, $sql_a );
	
	// Prüfen, ob eine Session-ID vorhanden ist, falls nicht -> neu anmelden
	$user = "";
	if ($ID != ""){
		$Verlaengerte_Anmeldezeit = time();
		$sql_b = "UPDATE ses_session SET anmeldezeit = '".$Verlaengerte_Anmeldezeit."' WHERE sessionID = '".$ID."'";
		odbc_exec( $cnx_ses, $sql_b );
		
		// passenden User zur ID suchen
		$sql_c = "SELECT usr FROM ses_session WHERE sessionID = '$ID'";
		$result = odbc_exec( $cnx_ses, $sql_c );
		while (odbc_fetch_row($result)) {
			$user = odbc_result($result, 1);
		}
	} else {
		echo "Wenn dieser Text erscheint wurde keine Session-ID &uuml;bergeben.";
		exit;
	}
?>

Diese Sessionverwaltung wird in jede Datei mit "require ("./session.php");" eingebunden. Bei jedem Klick des Users wird überprüft, ob seine Session noch aktuell ist oder nicht. Ist dies der Fall, erscheint die gewünschte Seite. Ist die Session abgelaufen, erhält er einen Link zur Neuanmeldung. Die Zeit bis zum nächsten Klick ist für User auf 15 Minuten, für Admins auf 60 min begrenzt. Das funktionierte auch bisher tadellos. Jetzt fragt ihr euch bestimmt wieso "funktionierte bisher". Genau da beginnt mein Problem. Ich habe 5 Seiten, auf denen diese session.php eingebunden ist. 4 von diesen Seiten funktionieren einwandfrei. Solange ich eine gültige Session besitze, kann ich alles tun und machen was auf der Seite möglich ist. Auf der Problemseite kann ich auch alles einstellen und, wie auf den anderen Seiten, auf eine Schaltfläche klicken (OK, Upload, bearbeiten, ....). Bei (fast) allen Seiten wird die Session erneut überprüft und es geht weiter. Nur bei der Problemseite komme ich bei der if-Anweisung "if ($ID != ""){" mit einer GÜLTIGEN Session-ID immer in den else-Zweig (und sehe damit die Fehlermeldung).

Ändere ich $ID ab, z.B. in $ID = 123, wird die if-Anweisung korrekt durchlaufen und ich erhalte die Fehlermeldung auf der Seite, dass meine Session-ID abgelaufen ist (das habe ich auf jeder Seite stehen). Ich habe auch einen Anweisungblock geschrieben der den anderen nachbildet:
if ($ID != "") {
echo "ja";
} else {
echo "nein";
}
Dieser wird korrekt durchlaufen. Ich kann ihn vor oder nach die eigentliche Anweisung setzen. Der mit dem ja/nein wird richtig durchlaufen, der andere nicht. Dieser Fehler tritt, wie bereits geschrieben, nur bei dieser einen Datei auf. Alle anderen Dateien funktionieren im Zusammenspiel mit der session.php problemlos.

Ich sass jetzt 3 Tage an diesem Problem und freue mich auf Ostern. Da werde ich mit Sicherheit nicht einmal PHP anschauen, da ich jetzt Feierabend mache. Ich denke mal ihr könnt euch vorstellen wie frustrierend so ein Problem ist. Also schreibt bitte alle Ideen hier hinein, ich werde am Dienstag wieder da sein.

Ich wünsche allen die das lesen frohe Ostern.

MfG

Olly
 
Ein Fehler der mir so spontan auffällt:
PHP:
$ID = $_GET[ID];
musst du in:
PHP:
$ID = $_GET['ID'];
ändern.

greetz
daddz
 
PHP:
<?php

	require('c:/hfm_verbindungen.inc.php');
	// Verbindung zur Datenbank aufbauen
	$cnx_ses = $wdefsql;

	// abgelaufene Sessions und Tabellenleichen entfernen
	$query = "
		DELETE
		  FROM
		        `ses_session`
		  WHERE
		        `sessionID` = '".myqsl_escape_string($_GET['ID')."'
		    AND (`anmeldezeit` + `anmeldedauer`) < ".time()."
		";
	odbc_exec( $cnx_ses, $query );
    
    // Prüfen, ob eine Session-ID vorhanden ist, falls nicht -> neu anmelden
    if( !empty($_GET['ID']) ) {

		$query = "
			UPDATE
			        `ses_session`
			  SET
			        `anmeldezeit` = '".time()."'
			  WHERE
			        `sessionID` = '".mysql_escape_string($_GET['ID'])."'
			";
		odbc_exec( $cnx_ses, $query );

		// passenden User zur ID suchen
		$query = "
			SELECT
			        `usr`
			  FROM
			        `ses_session`
			  WHERE
			        `sessionID` = '".mysql_escape_string($_GET['ID'])."'
			";
		$result = odbc_exec( $cnx_ses, $query );
		while( odbc_fetch_row($result) ) {
			$user = odbc_result($result, 1);
		}

	} else {

		echo 'Wenn dieser Text erscheint wurde keine Session-ID &uuml;bergeben.';
		exit;

	}

?>
 
Hallo zusammen,

danke für eure Tips. In Gumbos Skript waren ein paar kleine Schreibfehler, sonst läuft es. Auch daddz Tipps läuft. Der eigentliche Fehler lag doch in der besagten Problemdatei. Da war noch ein Schreibfehler drin. Jedoch wundere ich mich, wieso ich trotzdem eine Session übergeben bekommen habe.

Ich bedanke mich nochmals für eure Hilfe. Hab wieder etwas dazu gelernt.
 
Zurück