Session-ID erst beim Login

m-flame

Mitglied
Hallo,

habe folgendes Problem:

Meine Seite besitzt ein Login-Menue und daraus resultierend ist eine Session-ID eingebaut.

Beim Start meiner Seite durch einen User wird diesem nun einmalig bei jedem Link die Session-ID mitangezeigt, was mir nicht passt, da ich das ganze so schumaschinenfreundlich wie nur möglich haben möchte.
Den Tag {_SESSION} habe ich bereits von jedem Link entfernt, dennoch wird er beim ersten Start immer einfach hinten an den Link mit drangehangen.

Daher nun meine Frage: Ist es möglich die Session-ID erst zu starten oder Aufzurufen, wenn ein Login erfolgt (ist), weil dann kann es den Suchmaschinen ja prinzipiell egal sein, da sie sich sowie so nicht einloggen können?!

Schon einmal vielen Dank im Voraus!
 
Hoi m-flame

Bei den Sessions sieht's soviel ich verstanden habe folgendermassen aus:

PHP benutzt per default ein Cookie um die Session ID zu speichern. Akzeptiert der Browser keine Cookies dann gibt PHP automatisch die Session ID in der URL mit. Das ist eigentlich noch nicht schlimm, da die
Session nach einer gewissen Weile, die in php.ini definiert ist wieder schliesst. Das heisst, dass ohne gültig übergebenen Benutzernamen und Kennwort, die Session nicht gefunden wird.

Was passiert genau:
1. PHP überprüft, ob der Browser Cookies zulässt
2. Wenn ja, wird die Session Id als Cookie auf dem Rechner des Benutzers abgelegt
Wenn nein, dann wird die Session Id in der URL mitgegeben
3. Für jede Session wird ein File angelegt in dem Benutzername und Passwort steht
Die Session Id in der URL oder im Cookie wird dazu benötigt, dass dieses File gefunden werden kann
4. Solange das Expiration Date nicht abgelaufen ist, oder mit session_destroy() zerstört wurde,
bleibt die Session aktiv
5. Benutzername und Passwort werden in diesem Session File verglichen
6. Ist das Expiration Date überschritten, wird das File auf das die Session Id referenziert gelöscht
7. Von diesem Moment an kann, auch wenn die Session Id in der URL übergeben wird nicht mehr
eingeloggt werden, da dieses File nicht mehr existiert.

In php.ini findest du folgende Parameter:

# definiert, wie die sessions gespeichert werden (per default als plain text files)
session.save_handler = files

# definiert, wo die session files abgelegt werden
session.save_path = "N;/path"

# sollen cookies benutzt werden (1) oder nicht (0)
session.use_cookies = 1

# nach welcher zeit, sollen inaktive sessions gelöscht werden (Expiration Date)
session.gc_maxlifetime = 1440

Ich persönlich arbeite eigentlich selten mit den PHP Sessions für die Authentifizierung sondern mit
htaccess von Apache. Das hat mehr Power. Bei ca. 10000 gleichzeitigen PHP Sessions kannst du die Session ID's rauchen. Da werden deine PHP Seiten Saulangsam und produzieren Fehler.

Du kannst mit dem htpasswd Programm von Apache ein normales Passwort File erstellen oder meine Kurzanleitung unter http://www.ugly-sheep.org/phpBB2/viewtopic.php?t=4 lesen. Ich benutze mod_auth_external und ein Perl Script, um mit htaccess über MySQL oder andere Datenbanken zu authentifizeren. Der Vorteil ist, dass ich so mehrere Datenbanken abfragen kann.

In PHP gibt es Environment Variablen $_SERVER["PHP_AUTH_USER"] und $_SERVER["PHP_AUTH_PASS"]. In diesen Variablen findest du Benutzername und Passwort vom Benutzer, der sich über htaccess authentifiziert hast.

Für temporäres sonstiges Zeugs benutze ich die setcookie Funktion von PHP.

Mit Setcookie kannst du auch Benutzername und Passwort überprüfen. Jedoch muss der Benutzer dann Cookies akzeptieren. Also halt dich an htaccess das Bestandteil von Apache ist.

Hoffe, das hilft dir etwas.

Gruss
Chris
 
Zurück
Oben