phpbar.de logo

Mailinglisten-Archive

[php] JavaScript Fenster = neue Session?

[php] JavaScript Fenster = neue Session?

Björn Schotte php_(at)_phpcenter.de
Fri, 1 Feb 2002 17:38:42 +0100


Hallo Barbara,

* Barbara Griem wrote:
> Also ich frage extra vorher ab, daß der Client Cookies
> zulässt, also sollten Cookies benutzt werden. Allerdings
> finde ich den Cookie beim Client auch nicht wieder...
> (Müsste doch irgendwo bei den temporären Internetdateien
> sein...??)

Meist werden Cookies mit der Laufzeit "0" verwendet.
Das bedeutet: beendest du den Browser, so wird der
Cookie gelöscht.

Dass du den Cookie in den temporären Internetdateien
(du verwendest MS Internet Explorer?) nicht findest,
liegt daran, dass solche Cookies mit der Laufzeit einer
Browsersession (d.h. bis zum Beenden des Browsers)
vom Browser nicht in eine Datei geschrieben werden.
Macht ja auch keinen Sinn, da der Cookie ja nur so lange
gültig sein soll, wie die Browserinstanz existiert.

> Sorry wenn das alles konfus ist, aber mir ist diese
> Session-Geschichte wirklich kryptisch.

Mit einer Session stellst du sicher, dass du einen
Client über Scriptgrenzen hinweg identifizieren kannst.
Die Unterscheidung über IPs funktioniert nicht, da
mehrere Benutzer/Clients unter einer IP auftreten
können (Proxy) oder ein Benutzer unter mehreren IPs
(Reconnect zum Provider, DSL-Dialin mit automatischem
Disconnect etc.).

Aus diesem Grund gibt es die Sessions. Das ist in der
Regel eine kryptisch anmutende, 32-stellige Folge der
Zahlen 0-9 und a-f (Hexadezimalsystem), die meist über
die Funktion md5(uniqid("blahmagicstring")); erzeugt
wird. Der md5-Hash hat den Vorteil, eineindeutig zu
sein. Mit uniqid() und einem entsprechenden Zufallsstring
erzeugst du eine zufällige Folge, die an md5 übergeben
wird. So gehst du sicher, dass jedes Mal bei Erzeugen
der Session-ID, zwar ein md5-Hash erzeugt wird, dieser
aber eineindeutig ist.

Damit der Server den Benutzer also "identifizieren" kann,
ist diese Session-ID nötig. D.h. bei jedem Request muß
diese Session-ID vom Client an den Server übermittelt
werden. Findet der Server in seinen Aufzeichnungen diese
Session-ID und ist diese noch gültig, dann weiß er "Okay,
der war schon mal da". Findet er sie nicht, wird eine neue
Session-ID erzeugt und dem Client mitgeteilt.

Dieses Mitteilen geschieht in der Regel über zwei verschiedene
Wege: Cookies (bequem) oder über Anhängen der Session-ID als
Parameter an die URL (GET) oder als hidden-Form Element bei
Formularen (POST).

Der bequeme Weg liegt also darin, ein Cookie beim Client
abzuliefern und in diesem Cookie die Session-ID zu speichern.
Der Vorteil ist, dass bei jedem Request an diese Domain der
Cookie und damit auch die Session-ID automatisch mitgeliefert
wird. Wird der Cookie abgelehnt (das weißt du erst beim nächsten
Request, da Cookie über die HTTP-Header mitgeliefert werden),
so mußt du dafür sorgen, dass zukünftig die Session-ID "manuell"
angehängt wird (siehe nächster Absatz).

Bei den anderen beiden Methoden, mußt du dafür sorgen, dass
die Session-ID bei jedem Link und bei jedem Formular mit
übermittelt wird. Das heißt selbst bei einem window.open
aus JavaScript, das ein PHP-Script im neuen Fenster aufruft,
muß an dieses PHP-Script die Session-ID via GET-Parameter
übermittelt werden.

PHP4 kann dir hierbei allerdings einige Arbeit abnehmen,
mit dem Feature von --enable-trans-sid. Damit wird an alle
Links, Formulare etc., die im HTML-Code vorkommen, automatisch
die Session-ID angehängt. Dieses Feature funktioniert bis
einschließlich PHP4.0.6 *nicht*, _wenn_ du das Feature der
transparenten Output Compression verwendest, da hier die Output
Layer (Sascha, korrigiere mich falls ich falsch liege) "verschoben"
waren und das trans-sid Feature erst nach dem Komprimieren des
HTML-Codes einsetzte (und dementsprechend auch keine zu ergänzenden
Links mehr fand).

Warum allerdings Dario seine eigene Session-Klasse gebaut hat,
ist mir schleierhaft, gibt es doch dazu keinen mir auf den
ersten Blick ersichtlichen Grund ... (NIH-Syndrom? :)

-- 
PHP-Support * realitätsnahe Performance-Messungen mit Code-Analyse
    Webapplikationsentwicklung * PHP-Schulungen * Consulting
    
             0700-THINKPHP -*- bjoern_(at)_thinkphp.de


php::bar PHP Wiki   -   Listenarchive