Sessions / anfänger

hi ihr experten,

wer kann mir sessions erklären? *gg* nee, also im ernst. ich versuche mich in php und erarbeite hier und da ein paar sachen, zum üben, zum spass, naja. auf meiner seite kann man sich einloggen und dann bestimmte dinge sehen und persönliches bearbeiten.

nach dem motto „erst mal muss es klappen, dann kümmer ich mich um mehr“ habe ich bisher all meine links mit variablen ausgestattet, um den user beim seitenwechsel wiederzuerkennen, etwa so

seite2.php?id=$id$passwort=$passwort

dass das unter umständen für größere projekte unsicher war, war mir vollstens bewußt, ich übe ja nur. soweit.

erstes sicherheitsproblem: wenn ein user die url aus der zeile kopiert und verschickt, kann sich der empfänger als falscher user einloggen. doof.

jetzt habe ich sessions entdeckt, und das sceint mir zunächst eine lösung zu sein. aber mit der beschreibung aus den büchern und von de.php.net/manual komm ich nicht klar. mag mich jemand korrigieren, falls ich mit folgendem falsch liege? ich möchte nicht meine scripts umbauen, bevor ich nicht weiss, dass ichs richtig verstanden habe:

mit

session_start()

am anfang einer php-datei wird eine session gestartet, deren id neu ist oder wenn vorhanden übernommen wird. dabei wird eine datei auf dem server abgelegt, die inhalte haben kann. die id dieser session wird automatisch per cookie gespeichert, wenn das deaktiviert wird, wird eine variable sid gebaut. ich muss mich um nix kümmern.

links in meiner site werde ich in zukunft mit

seite2.php?sid=$sid

aufrufen. wenn der user cookies akzeptiert hat, kommt bei seite 2 die sid per cookie an, wenn nicht, übernimmt das ?sid=$sid diese übertragung.

mit
$_SESSION[‚id‘]
$_SESSION[‚passwort‘]
$_SESSION[‚nochnevariable‘];
und so weiter kann ich nun variablen übergeben bzw. auslesen. diese werden auf dem server gespeichert und ausser der sid bekommt keiner was mit. wenn der user die seite verläßt oder den browser schließt, wird diese datei gelöscht.

somit ist eigentlich alles geklärt - wenn ich diese vorgehensweise soweit richtig verstanden habe.

was sollen dann aber bloss die ganzen anderen sachen wie session_register ( mixed Name [, mixed …]) oder session_id()

sowas muss ja ne bedeutung haben :wink: aber die erklärungen versteh ich nicht. auch, was die autoren der bücher und beschreibungen immer von mir wollen, wenn sie mir etwas über diese php.ini erzählen oder was ich darin ändern soll (mich würde mehr interessieren, ob ich eine eigene php.ini bei strato habe und wo die ist, oder ob die für mich als kunden überhaupt veränderbar ist)

soweit.

vielen dank für eure hilfe :smile:

christian

Hi !

mit

session_start()

am anfang einer php-datei wird eine session gestartet, deren
id neu ist oder wenn vorhanden übernommen wird. dabei wird
eine datei auf dem server abgelegt, die inhalte haben kann.
die id dieser session wird automatisch per cookie gespeichert,
wenn das deaktiviert wird, wird eine variable sid gebaut. ich
muss mich um nix kümmern.

Genau.

links in meiner site werde ich in zukunft mit

seite2.php?sid=$sid

Das hängt PHP automatisch an, falls man relative Links (ohne http://) angibt, muss man nicht selbst machen

aufrufen. wenn der user cookies akzeptiert hat, kommt bei
seite 2 die sid per cookie an, wenn nicht, übernimmt das
?sid=$sid diese übertragung.

Ja.

mit
$_SESSION[‚id‘]
$_SESSION[‚passwort‘]
$_SESSION[‚nochnevariable‘];
und so weiter kann ich nun variablen übergeben bzw. auslesen.
diese werden auf dem server gespeichert und ausser der sid
bekommt keiner was mit. wenn der user die seite verläßt oder
den browser schließt, wird diese datei gelöscht.

Fast, wenn der Benutzer eine (in der php.ini definierte Zeit) keine neue Seite aufruft, wird gelöscht.

was sollen dann aber bloss die ganzen anderen sachen wie
session_register ( mixed Name [, mixed …]) oder session_id()

Das ist ALT. Sessions wurden mit 4.0 eingeführt, da gab es das $_SESSION noch nicht. Das kam mit 4.1 oder so. session_register / _unregister sollte man nicht verwenden.

Die Konstante SID (name=sid steht da drin) braucht man noch manchmal:
Header("Location: http://example.com/seite.php?".SID);
(bei Header klappt die automatische Übergabe nicht)

Von den restlichen Funktionen braucht man eigentlich nur noch session_destroy für den Logout-Button.
Alles andere ist finetuning, man kann z.B. festlegen, das die Sessions nicht in Dateien, sondern in einer Datenbank gespeichert werden, die Timeout-Zeit einstellen, einen anderen Namen für die Variable/den Cookie festlegen (session_name muss vor session_start!), etc.

sowas muss ja ne bedeutung haben :wink: aber die erklärungen
versteh ich nicht. auch, was die autoren der bücher und
beschreibungen immer von mir wollen, wenn sie mir etwas über
diese php.ini erzählen oder was ich darin ändern soll (mich

Das sind die Grundeinstellungen von PHP. phpinfo() gibt die schön formatiert aus.

würde mehr interessieren, ob ich eine eigene php.ini bei
strato habe und wo die ist, oder ob die für mich als kunden
überhaupt veränderbar ist)

In der Regel nicht. Bei einigen Hostern kann man einzelne Einstellungen per .htaccess festlegen, wie das bei Strato ist weiss ich nicht.

Alexander

Ergänzung
Hi !

URL vergessen, auch wenn die schon in der Brettbeschreibung steht:
http://php-faq.de/ch/ch-version4_session.html

Alexander

vielen dank für die schnellen antworten. das hat mir echt weitergeholfen.

eine frage noch: diese probleme mit dem „zurück“-knopf, von denen ich gelesen habe usw.usf. - ist das auch schon obsolet oder güldet das noch immer? muss ich da auf etwas achten, oder kann ich einfach so wie beschrieben meine scripte umbauen?

danke

kalli

vielen dank für die schnellen antworten. das hat mir echt
weitergeholfen.

eine frage noch: diese probleme mit dem „zurück“-knopf, von
denen ich gelesen habe usw.usf. - ist das auch schon obsolet
oder güldet das noch immer? muss ich da auf etwas achten, oder
kann ich einfach so wie beschrieben meine scripte umbauen?

Kommt auf dein Script an. GGfs. werden beim „Zurück“ eben Anfragen noch einmal gesendet, für welche du keine Daten mehr in der Session hast.

  1. Seite: Eingabe x, Speichern in Session
  2. Seite: Eingabe y, "
  3. Seite: Bestätigung, Speichern x und y in DB, x und y aus Session löschen

Geht der Benutzer jetzt zurück zur Seite 2 und sendet erneut ab, fehlt x in der Session. Sowas ist aber nur auf das aktuelle Script bezogen zu lösen, ggfs. muss man eben das Caching abschalten (um einen neuen Request beim „Zurück“ zu erzeugen) und vor Aufruf einer solchen Seite prüfen, ob alle Voraussetzungen erfüllt sind.

Damit hängt auch ggfs. http://php-faq.de/q/q-formular-mehrfach.html zusammen.
Wie man den Cache abschaltet steht auch in der FAQ, blättere die ruhig erst einmal durch…

Alexander