Übliches header:location Problem

Ja geht, aber ein Header ist ein Header ist ein Header. Das sollte gehen.
PHP:
header("Location: http://".$_SERVER['SERVER_NAME']."/index2.php?fehler=1", true, 301);
exit();

Hauptsache es wird keine Ausgabe gemacht, sonst verhalten sich manche Browser denkbar komisch.

Kannst du eine .zip bereitstellen, damit das andere Lokal testen können? (Ohne DB etc.)
 
Zuletzt bearbeitet:
Nein, das hat leider auch nichts geholfen :(
Und was mich noch immer so stutzig macht, ist, dass beim Aufruf von intern.php mit neuen GET-Parametern die Seite (meistens) auch erst nach dem Aktualisieren angezeigt wird. Eine simple Navigation mit get...und es funktioniert auch nicht...
Ich werde ein zip erstellen und es dann posten.
 
Also hier der Source-Code im zip-container.

Mir ist jetzt noch aufgefallen, im IE7 und 8 funktionierts tadellos. Hab in diesen Files die unwichtigen Sachen natürlich rausgenommen, die Änderungen sollten eigentlich nichts am Problem geändert haben. Hab aber mal probeweise die login.php einfach so aufgerufen (user und passwort hab ich nicht per Post wie normal, sondern direkt im File angegeben) und die Weiterleitung zur intern.php hat im IE 6 prima funktioniert. Dann hab ich wieder die normale Login-Seite genommen, die Parameter wurden wieder per Post übergeben, und es hat schon wieder nicht funktioniert. Kann es sein, dass es nicht funktioniert, weil hier auf die login.php weitergeleitet wird, der Browser irgendwie noch nicht alles verarbeitet hat und plötzlich kommt schon die header() Anweisung, und dass ihn eben das aus der Bahn wirft?

Verflixtes Ding...:confused:

lg
 

Anhänge

Also jz steht die Welt nicht mehr lange...

Das ist der Beginn der intern.php:
PHP:
<?php session_start(); 
if (!isset($_SESSION["user_id"])) 
{
 	header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php", true, 301);
	exit();
} else {
	$t = time();
	if(($_SESSION["last_action"] + 900) < $t)	//15 Minuten
	{ 
		header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php", true, 301);
		exit();
	} else {
		$_SESSION["last_action"] = $t;
	} 
}
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]

Wie bereits mehrmals beschrieben gibt er beim Aufruf dieser Seite (bzw. wenn auf sie von der login.php weitergeleitet wird) nichts aus.

ABER: Wenn ich nur etwas wie das z.B. einfüge:
PHP:
<?php session_start(); 
if (!isset($_SESSION["user_id"])) 
{
 	header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php", true, 301);
	exit();
} else {
	$t = time();
	if(($_SESSION["last_action"] + 900) < $t)	//15 Minuten
	{ 
		header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php", true, 301);
		exit();
	} else {
		$_SESSION["last_action"] = $t;
	} 
}

echo 'hallo'; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]
Dann gibt der IE (6) "Hallo" aus und sonst NICHTS!
Der hört quasi vor dem wirklichen Teil der Seite einfach auf...:confused:
Wie gesagt, nach Aktualisierung zeigt er alles an, aber WARUM?
 
Deine Zip kann man natürlich nicht testen, da sie keine Login-Daten enthält und insgesamt etwas zu fehlen scheint.

Also jz steht die Welt nicht mehr lange...

Das ist der Beginn der intern.php:
PHP:
<?php session_start(); 
if (!isset($_SESSION["user_id"])) 
{
 	header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php", true, 301);
	exit();
} else {
	$t = time();
	if(($_SESSION["last_action"] + 900) < $t)	//15 Minuten
	{ 
		header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php", true, 301);
		exit();
	} else {
		$_SESSION["last_action"] = $t;
	} 
}
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]

Wie bereits mehrmals beschrieben gibt er beim Aufruf dieser Seite (bzw. wenn auf sie von der login.php weitergeleitet wird) nichts aus.

Im Quelltext steht nichts? Bei welchem Aufruf (direkt ohne Session, direkt mit gültiger Session, direkt mit abgelaufener Session)? Ohne oder mit abgelaufener musst du daran denken, dass er weiterleitet, eventuell auf eine leere Seite.

Dann gibt der IE (6) "Hallo" aus und sonst NICHTS!

Das Hallo davor macht die Seite natürlich invalide. Vielleicht etwas im Markup, dass IE erst beim zweiten Durchlauf versteht? Teste nur das Markup in einer einfachen .htm
 
Im Quelltext steht nichts? Bei welchem Aufruf (direkt ohne Session, direkt mit gültiger Session, direkt mit abgelaufener Session)? Ohne oder mit abgelaufener musst du daran denken, dass er weiterleitet, eventuell auf eine leere Seite.

Das "lustige" daran ist, dass in der Adresszeile der Name der "Login-Formular"-Seite drin stehen bleibt (index2.php). Und man kann sich keinen Quelltext anzeigen lassen, auch mehrmaliger Aufruf von Ansicht > Quelltext bringt da nichts...
Weitergeleitet wird, wie du vielleicht im Source-Code gesehen hast, nach setzen der ganzen Session-Variablen. Und es befindet sich auf jeder Seite ganz am Anfang ein session_start();

Das Hallo davor macht die Seite natürlich invalide. Vielleicht etwas im Markup, dass IE erst beim zweiten Durchlauf versteht? Teste nur das Markup in einer einfachen .htm

Wenn ich nur die HTML-Elemente lasse, zeigt er die Seite bei gleichem Aufruf richtig an. So war es ja auch mit der originalen, wenn ich die login.php direkt aufgerufen habe (und natürlich die Userdaten schon fix eingegeben habe).

Wie würdest du dir das erklären, wenn er etwas erst "beim 2. Mal" versteht?

lg
 
Wie würdest du dir das erklären, wenn er etwas erst "beim 2. Mal" versteht?

So etwas hatte bisher immer mit der Session bei mir zu tun, welche durch Weiterleitung die Cookies nicht an den Browser ausliefern konnte. Daher meine Frage in welchem Zustand die Seite aufgerufen wurde. Das dort ein session_start() steht ist mir bewusst. Lässt du die Cookies bestehen und hast immer eine gültige Session-ID drin, oder löscht du diese jedes mal?

Du solltest dir einmal die empfangenen Header ansehen. Geht bei deinem Fall per PHP, indem [phpf]headers_list[/phpf] in einer Datei gespeichert wird. Das sollte einigen Aufschluss geben.
 
Ich setze einmal in der login.php bei erfolgreichem Login 4 Session-Variablen (= Cookies?) Unteranderem $_SESSION["user_id"], wo die User-Id aus der Datenbank gespeichert wird. Diese wird bei jedem Aufruf abgefragt, ob sie gesetzt ist, und falls nicht, ist ja niemand eingeloggt, und der wird auf die index-Seite zurückverwiesen. Erst dann beim Klick auf Logout (oder automatisch nach 15 Minuten) wird die logout.php aufgerufen, wo
PHP:
session_start (); 
session_unset (); 
session_destroy ();
drin steht. Diese Befehle sind sonst nirgends vorhanden.

Mit dem headers_list() hab ich 3 mal das gleiche herausbekommen. Hab
PHP:
var_dump(headers_list());
nach jedem session_start(); (also gleich zu Beginn) bei index2.php, login.php und intern.php eingefügt. 3 Mal das hier bekommen:

Code:
array(4) {
[0]=> string(24) "X-Powered-By: PHP/5.2.10"
[1]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
[2]=> string(77) "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
[3]=> string(16) "Pragma: no-cache"
}

Was bedeutet das jetzt?

lg
 
Was bedeutet das jetzt?

Du siehst dort keine Cookies (für die Session) und auch keine Location (für das Redirect). Das bedeutet du hattest schon eine am laufen oder es wird keine erstellt.
(Zu Prüfen mit [phpf]getallheaders[/phpf])

Sind das die Header-Daten am Ende vom Skript bzw. vor einem exit() ?
 
Zuletzt bearbeitet:
Also die Daten von vorher, die hat er alle bei var_dump(headers_list()) direkt nach session_start(); ausgegeben.

Wenn ich nach session_start() auf der index-Seite (ohne eingeloggt zu sein) getallheaders() ausgebe, kommt folgendes:
PHP:
array(10) { 
["Host"] =>  string(11) "[..url...]"
["User-Agent"] =>  string(85) "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3"
["Accept"]=>  string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
["Accept-Language"]=>  string(35) "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3"
["Accept-Encoding"]=>  string(12) "gzip,deflate"
["Accept-Charset"]=>  string(30) "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
["Keep-Alive"]=>  string(3) "300"
["Connection"]=>  string(10) "keep-alive"
["Cookie"]=>  string(42) "PHPSESSID=5c8977dc4f94994928e34c0722bd56e8" ["Cache-Control"]=>  string(9) "max-age=0" 
}
Also hat er hier offensichtlich noch eine Session offen von früher offen oder?
 
Zurück