Angepinnt [Guide]Sessions in PHP

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Guide]Sessions in PHP

      Hallo Core'lers
      Da xSay seinen Guide trotz Aufforderung nicht erweitert hat, habe ich diesen gelöscht und den Entschluss gefasst einen neuen zu schreiben.
      Und hier ist die bessere Variante.

      [FELD="Inhalt"]
      1. Vorwort
      2. Was ist eine Session
      3. Wie benutzt man Sessions
      4. Beenden einer Session
      5. Fehlerbehandlung - Could not send Session Cookie, Headers already send
      6. Nachwort

      [/FELD]

      [COLOR="Orange"][SIZE="4"]1. Vorwort:[/SIZE][/COLOR]
      Jeder, der schonmal im Internet war (denke das waren so die meisten, die hier sind^^), kennt doch sicher Formulare.
      Diese Dinger werden meistens dafür genutzt, Daten von Usern eingeben zu lassen, um sie dann für Registrationen o.Ä zu nutzen.
      Die PHP'ler unter uns werden sicher wissen, dass man zum Speichern von Daten Variablen nehmen kann. (Auch unsere Programmierer unter uns, Variablen gibts fast überall)
      Jedoch haben Variablen in PHP eine Lebensdauer von 1 Seite, das heißt nach einem Seitenwechsel sind die Daten weg.
      Um nun eine Langzeitspeicherung vorzunehmen, benutzt man Sessions.

      [COLOR="Orange"][SIZE="4"]2. Was ist eine Session[/SIZE][/COLOR]
      Eine Session, auch Sitzung genannt, ist das Zauberwort um Daten zu speichern.
      Eine Session hat eine längere Lebensdauer als eine Variable, nämlich solange wie man den Browser nicht schließt.
      Wenn eine Session gestartet wird, vergibt der Server eine einzigartige ID, die so genannte SessionID.
      Diese wird in Form eines Cookies auf dem PC gespeichert und dieses Cookie hat die besagte Lebendauer einer Browsersession.
      Bei jedem weiteren Seitenaufruf schickt der Browser alle SessionIDs mit, die er kennt und dies an alle Webserver, die man im Verlauf einer einzigen Session ansurft.
      Der Server vergleicht nun die IDs mit denen, die er kennt und noch vorhanden sind. (Sessions haben auch auf dem Server nur eine begrenzte Lebensdauer, meist werden die Daten einer bestimmten Session nach 30min ohne Anforderung gelöscht, hängt von der Konfiguration des Webservers ab.)
      Sollte eine SessionID mit der auf dem Server übereinstimmen, so sendet der Webserver die Daten der jeweiligen Session an den Browser, bzw er lädt diese und nutzt sie bei der Abarbeitung von der jeweiligen Webseite.
      Lange Theorie, ich weiß, aber nun kommen die interessanteren Dinge, nämlich die Anwendung^^

      [COLOR="Orange"][SIZE="4"]3. Wie benutzt man Sessions[/SIZE][/COLOR]
      Als erstes sollte man Sessions einsatzbereit machen.
      Dies erfolgt über

      PHP-Quellcode

      1. <?php session_start(); ?> /*falls man am Anfang einer Seite schon nen PHP Block hat, kann man den Befehl auch dort einsetzen ohne das <?php ?>*/

      Diesen Befehl am besten an den Anfang der Seite, um die volle Funktionalität zu gewährleisten.
      Wie gesagt, der Browser schickt die SessionIDs, die er kennt zum Webserver und der Webserver nimmt dann die passenden SessionID und startet die Session mit dieser ID.
      Nachdem die Seite wieder an den Browser gesendet wurde, sind alle Aktionen geschehen, die eine Session nutzen und die anderen Dinge auch.
      Aber dazu später mehr.

      Nachdem eine Session geladen oder erstellt wurde wurde (Anmerkung: Man kann mit o.g Befehl auch eine Session starten), kann sie benutzt werden.
      Nehmen wir mal an, wir wollen einen Benutzer einer Webseite identifizieren solange er auf der Webseite online ist und seinen Namen als Begrüßung nutzen.
      Natürlich könnte man dafür Variablen nutzen, aber das ist auf Dauer lästig.
      Stattdessen nutzen wir Sessions. (Anmerkung 2: Sessions sind auch Variablen, bzw eine sog. Superglobale als Array.)
      Nun, nachdem sich der User eingeloggt hat und die Daten überprüft worden sind, wollen wir die Daten in der Session speichern.
      Dazu kann man die Session wie ein normales Array nutzen, mit der Ausnahme dass Session immer Global sind und damit überall gültig, auch wenn sie in einer Funktion definiert wurden.
      Hier ein Beispiel:

      Quellcode

      1. $_SESSION['Name'] = "internetfreak" //Hiermit wird dem Key Name aus dem SessionArray der Name internetfreak zugewiesen.

      Wenn wir nun diese Information nutzen wollen, so reicht folgender Befehl:

      Quellcode

      1. echo $_SESSION['Name'];

      In unserem Beispiel lautet der Befehl:

      Quellcode

      1. echo 'Willkommen '.$_SESSION['Name];

      Der Befehl erzeugt folgende Ausgabe:

      Quellcode

      1. Willkommen internetfreak.

      Wie ihr seht, lassen sich Sessions nutzen wie eine normale Variable, mit der Ausnahme dass man sie erst durch o.g Befehl einsatzbereit machen muss.

      [COLOR="Orange"][SIZE="4"]4. Beenden einer Session[/SIZE][/COLOR]
      Um voranzukommen und das Thema nicht zu lang zu machen, folgt nun dieser Punkt.

      Also nehmen wir unsere Session von vorhin.
      Wir wollen nun die Session beenden, weil der User sich ausgeloggt hat.
      Dazu haben wir mehrere Möglichkeiten.
      1. Der User beendet den Browser - Die Session wird ungültig weil die Sitzung beendet ist.
      2. Wir löschen die Session manuell.
      Dies können wir durch folgende Befehle lösen:

      Quellcode

      1. //Session öffnen zum bearbeiten
      2. session_start();
      3. // komplette session nichtig machen
      4. session_unset();
      5. //session zerstören
      6. session_destroy();

      Nachdem dies getan wurde, sind alle funktionen welche Sessions brauchen, nicht mehr verfügbar.
      Man muss die Session neu anlegen bzw füllen, dann klappts wieder^^

      [SIZE="4"][COLOR="Orange"]5. Fehlerbehandlung - Could not send Session Cookie - Headers already send:[/COLOR][/SIZE]
      Sollte euch dieser Fehler vorkommen, keine Panik.
      Hier meine Fehlerbehandlung, bissl weiter unten schonmal erklärt^^

      internetfreak schrieb:


      ZU dem Fehler:
      Wie man der Meldung entnehmen kann, wurden die HTTP-Header schon gesendet.
      Aber hier die Erklärung warum der Fehler kommt und wie er zu beheben ist:
      session_start(); ist eine so genannte Header Funktion.
      Es gibt verschiedene Header Funktionen cookie_start() gehört auch dazu.
      (P.S: Damit kann man Cookies starten und nutzen, wie bei Sessions, nur dass Cookies von der Lebendauer wieder anders sind.)
      Aber nun zurück zum Fehler.
      Der Befehl session_start MUSS! vor allen anderen Befehlen stehen, wo eine Ausgabe getätigt wird.
      Am besten man setzt ihn noch vor den einleitenden <html> Tag, also in Zeile 1 der Seite die Sessions nutzen soll.
      Ansonsten, setze vor das session_start noch ein "ob_start()" und nach dem session_start() ein "ob_end_flush()"
      ob steht für OutPut Buffering, d.h es fängt die Ausgabe ab und speichert sie in einem Puffer.
      So kann eine Header Information auch noch wirken, wenn bereits eine Ausgabe getätigt wurde.
      Nützlich ist das z.B. bei Nutzung von include, da je nach Stelle des Includes schon Ausgaben getätigt worden sein können.
      Hoffe der Fehler wird so behoben, sollte er zumindest, ich benutze Sessions schon ne Zeit lang.



      [SIZE="4"][COLOR="Orange"]6. Nachwort:[/COLOR][/SIZE]
      So das war mein Guide, hoffe er gefällt euch besser als der von xSay
      Lob Kritik usw könnt ihr hier posten^^
      Falls ihr noch irgendeinen Guide wollt, so schreibt mir ne PM, ich werde sehen ob ich genug weiß für nen Guide.
      Zum Abschluss noch paar nette Infos über den Guide:

      [FELD="Statistiken:"]
      Allle Infos stammen aus Word, über die Funktion "Wörter zählen" kam ich dran
      Seiten: 3 (ohne BB-Code nur 2)
      Wörter: 801 (ohne BB-Code nur 796)
      Zeichen inklusive BB-Code ohne Leerzeichen: 4.728
      Zeichen inklusive BB-Code und Leerzeichen: 5.461
      Zeichen ohne BB-Code und Leerzeichen: 4.351
      Zeichen ohne BB-Code mit Leerzeichen: 5.086
      Absätze: 68 (ohne BB-Code: 61)
      Zeilen: 107 (ohne BB-Code: 100)
      Gesamte Zeit die gebraucht wurde für den Guide: 1-2 Stunden)
      Diese Statistiken wurden mit Sorgfalt erstellet und können abweichen, ich übernehme keine Haftung für Abweichungen.
      Dieses Statistikenfeld zählt übrigens nicht mit zur Berechnung
      EDIT 03.03.2010: Statistiken Out of Date
      [/FELD]
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Eine Session hat eine längere Lebensdauer als eine Variable, nämlich solange wie man den Browser nicht schließt.


      Eine Session wird üblicherweise nach etwa 1ner Stunde (geschätztn und Browserabhänig) ohne Aktuallisierung,
      also entweder ein Refresh der Page oder ein Klick auf eine andere Seite automatisch
      zerstört.
    • [FONT="Comic Sans MS"][COLOR="PaleTurquoise"][SIZE="3"]Hab ich doch erwähnt, dass ne Session nach ca 30min ohne Aktivität gelöscht wird.
      Unter Punkt 2 stehts doch drin o_ô
      nur habe ich halt 30min verwendet, hängt aber von der Konfiguration ab
      Und mit dem Browser hats meist eh wenig zu tun, Sessions sind Serverabhängig und werden nur durch ein Sessioncookie auf dem PC gesichert, welches eine Lebendauer von 1 Browsersession hat.
      Nur der Server löscht die Session sobald sie nicht mehr genutzt wurde seit o.g Zeit[/SIZE][/COLOR][/FONT]
    • internetfreak;90577 schrieb:

      [FONT="Comic Sans MS"][COLOR="PaleTurquoise"][SIZE="3"]Hab ich doch erwähnt, dass ne Session nach ca 30min ohne Aktivität gelöscht wird.
      Unter Punkt 2 stehts doch drin o_ô
      nur habe ich halt 30min verwendet, hängt aber von der Konfiguration ab
      Und mit dem Browser hats meist eh wenig zu tun, Sessions sind Serverabhängig und werden nur durch ein Sessioncookie auf dem PC gesichert, welches eine Lebendauer von 1 Browsersession hat.
      Nur der Server löscht die Session sobald sie nicht mehr genutzt wurde seit o.g Zeit[/SIZE][/COLOR][/FONT]


      sawry, das hab ich irgentwie überlesen.
    • [FONT="Tahoma"][COLOR="DarkOrange"][SIZE="2"]Tut mir Leid das ich noch andere Sachen zutun habe.
      Naja egal der Guide ist auch ganz okay , eventuell könntest du ja mal ein paar Praktische Beispiele zeigen.
      Und du könntest noch Fehlermeldungen erklären.

      Quellcode

      1. Cannot send session cookie - headers already sent,
      2. Warning: session_start() [function.session-start]: open(...) failed: No such file or directory
      [/SIZE][/COLOR][/FONT]
    • [FONT="Comic Sans MS"][COLOR="PaleTurquoise"][SIZE="3"]Ja, aber du hättest zumindest mal zeit finden können, kurz bissl zu ergänzen.
      Naja auch schön dass du meinen Guide gut findest.
      ZU dem Fehler:
      Wie man der Meldung entnehmen kann, wurden die HTTP-Header schon gesendet.
      Aber hier die Erklärung warum der Fehler kommt und wie er zu beheben ist:
      session_start(); ist eine so genannte Header Funktion.
      Es gibt verschiedene Header Funktionen cookie_start() gehört auch dazu.
      (P.S: Damit kann man Cookies starten und nutzen, wie bei Sessions, nur dass Cookies von der Lebendauer wieder anders sind.)
      Aber nun zurück zum Fehler.
      Der Befehl session_start MUSS! vor allen anderen Befehlen stehen, wo eine Ausgabe getätigt wird.
      Am besten man setzt ihn noch vor den einleitenden <html> Tag, also in Zeile 1 der Seite die Sessions nutzen soll.
      Ansonsten, setze vor das session_start noch ein "ob_start()" und nach dem session_start() ein "ob_end_flush()"
      ob steht für OutPut Buffering, d.h es fängt die Ausgabe ab und speichert sie in einem Puffer.
      So kann eine Header Information auch noch wirken, wenn bereits eine Ausgabe getätigt wurde.
      Nützlich ist das z.B. bei Nutzung von include, da je nach Stelle des Includes schon Ausgaben getätigt worden sein können.
      Hoffe der Fehler wird so behoben, sollte er zumindest, ich benutze Sessions schon ne Zeit lang.

      EDIT:
      Ja Fehlermeldungen könnte ich noch hinzufügen im Thread, sofern es noch welche gibt, mir ist eig nur die Fehlermeldung von dir vorgekommen, sonst sollte es normalerweise keine geben bei sachgemäßer Behandlung.

      Praktische Beispiele kommen noch, wollte ein komplettes Login System veröffentlichen, aber war zu faul es hier in MMO zu schreiben.
      Sobald ich das Loginsystem für meine aktuelle HP wo ich dran bin fertig habe, werde ich es hier auch reinstellen.
      Komplett und unzensiert sowie auskommentiert^^
      [/SIZE][/COLOR][/FONT]
    • despiteous;145457 schrieb:

      Nunja ich habe da eine Frage:
      Ist es möglich die Variable $_SESSION['lol'] aus der Datei index.php auf irgendeine
      Weise in die Datei XYZ.php zu bekommen ?


      ja einfach auch in dieser datei das

      session_start();
      eingeben und wie in der index.php die vergebenen $session variabele benutzen,

      Mfg Me

      edit :

      beispiel :

      index.php :

      PHP-Quellcode

      1. <?php
      2. session_start();
      3. $session['user'] = 'Eldoran';
      4. echo ' <a href="xyz.php">Hier gehts zur nächsten seite</a>';
      5. ?>


      jetzt der code von der xyz.php

      PHP-Quellcode

      1. <?php
      2. session_start();
      3. echo 'Hallo'.$session['user'].'willkommen auf unserem beispiel Script.';
      4. ############################
      5. #hier kannst du jetzt alles benutzen was du in der index.php gespeichert
      6. #hast an $session variablen
      7. ############################
      8. session_destroy();
      9. ?>