phpbar.de logo

Mailinglisten-Archive

[php] externe Verlinkungen bei Sessions mit GET

[php] externe Verlinkungen bei Sessions mit GET

Lars Volkhardt php_(at)_phpcenter.de
Mon, 26 Nov 2001 12:54:07 +0100


Hallo Liste,

Norbert Pfeiffer <norbert_(at)_itbw.de> schrieb am
Montag, 26. November 2001, 08:17:

> oops,
> - wenn Du mit haeder(); umleitest,
>   schickt Dein Browser ueberhaupt nix mit,
>   WEIL: das ist eine serverseitige Umleitung, die dem Browser unbekannt
>   ist. Das kannst Du auch leicht nachpruefen, da diese Adresse in der
>   History vom Browser nie auftaucht.

ooops,
wenn ich mit header("Location: ...") umleite, sendet sehr wohl der
Server etwas an den Browser. Und diese "Seite" (eigentlich ist es
keine, da nur Header-Daten gesendet werden) ist dem Browser auch
bekannt, nur zeigt er dir das nicht.

Das ist auch gut so, denn sonst würde deine History bald überquellen
vor lauter Umleitungen.

Der Server sendet an den Browser nämlich das "302 Found", was in etwa
"übersetzt" bedeutet:
"Die von dir angeforderte Seite ist zwar nicht hier, aber ich weiß wo
sie ist, folge der Location-Angabe, die ich dir gerade eben
mitgesendet habe, dann findest du deine gewünschte Seite."
Quasi ein Wegweiser im Netz, der sowohl auf den gleichen Server, als
auch auf einen anderen Server im Netz verweisen kann.

Daß der Server bei header("Location: ...") etwas an den Browser sendet
(der Browser also auch etwas davon mitbekommt), sagt ja schon die
Funktion header() aus!
"Es gibt zwei Spezialfälle von Header-Aufrufen. Der Erste ist der
'Location'-Header. __Es wird nicht nur der Header an den Browser
geschickt__, der Apache ..."
( http://www.php3.de/manual/de/function.header.php )

Das Umleiten kommt übrigens sehr sehr häufig vor, z.b. wenn du nur
http://www.php-center.de/tutorial , also den URL ohne den Slash (/)
am Ende in deinen Browser eingibst, dann sendet der Browser ein
Get-String ala: "GET /tutorial" an den Server, und dieser antwortet
mit "301 Moved Permanently" (leicht anders als "302 Found").
Darauf hin schaut dein Browser in die vom Server in der
Location-Zeile des Headers angegebene Adresse, und ruft diese
anschließend sofort auf, ohne das du den Browser auch nur flackern
siehst.
In diesen Beispiel wäre die Location-Angabe dann einfach nur:
Location: http://www.php-center.de/tutorial/
(also diesmal mit / am Ende, da es sich bei "tutorial" um ein
Verzeichnis handelt).

>   Und wenn da noch ein Proxy dazwischen ist (wozu), bekommt der das auch
>   nur nicht mit, es sagt ihm ja keiner was... ;-)

Der Proxy ist lokal, und nur dazu da, damit ich eben solche Dinge
sehe, die dir (bisher?) verborgen bleiben. ;-)

> - wenn Du mit readfile(); externe Daten anforderst,
>   weiss der Browser auch nix davon und der externe Server wird von dem
>   Script kontaktiert, in dem readfile(); steht, das logt er auch.

Das ist richtig, aber das eine hat mit dem anderen absolut nichts zu
tun.

> - last not least, wenn Dein Umleitungsscript innerhalb des mit
>   Sessions geschuetzten Bereiches liegt, hattu Pech, muttu aendern...

Es ist vollkommen egal, wo die beiden Bereiche liegen. Sobald du von
einem Session-Bereich direkt oder über Umleitung mit header() in den
Nicht-Session-Bereich gehst, sendet der Browser den Referer aus dem
Session-Bereich mit!

Etwas anderes ist es, wenn du mittels HTML-Anweisung umleitest, also
z.b. die Datei umleiten.html aufrufst, in der steht:

<meta HTTP-EQUIV="refresh" CONTENT="30; URL=http://www...">

Das funktioniert aber eben nur bei Links, nicht aber bei per <img...>
eingebundenen Bildern! (und darum ging es ja hier eigentlich mal...)

Du solltest dir dringend mal die grundlegenden Funktionen des HTTP
anschauen, z.B. hier:
http://www.rfc-editor.org/rfc/rfc2616.txt

Ist übrigens ne sehr gute Nacht Lektüre ;-)

Tschüß,
Lars


php::bar PHP Wiki   -   Listenarchive