Was ist der Unterschied zwischen Sitzungen und Cookies in PHP?

73

Was ist der Unterschied zwischen Sitzungen und Cookies in PHP?

Hart
quelle
4
Sind wir uns einig, dass sowohl die Frage als auch die Antworten sprachunabhängig und nicht PHP-spezifisch sind? Wenn ja, sollte die Frage nicht bearbeitet werden?
Augustin Riedinger

Antworten:

102

Ein Cookie besteht aus Daten, die vom Browser gespeichert und bei jeder Anforderung an den Server gesendet werden.

Eine Sitzung ist eine Sammlung von Daten, die auf dem Server gespeichert und einem bestimmten Benutzer zugeordnet sind (normalerweise über ein Cookie, das einen ID-Code enthält).

QUentin
quelle
@ Quentin :) Cookies können auch in Sitzung gespeichert werden?
Harte
3
Auch Sitzungswerte werden nach dem Schließen der Verbindung zurückgesetzt. Cookies-Werte werden normalerweise gespeichert.
BadSkillz
@poter - Wenn ein Datenelement auf dem Server gespeichert ist, wird es nicht vom Browser gespeichert (Kopien von Daten werden nicht berücksichtigt). Nein, Sie können kein Cookie in einer Sitzung speichern.
Quentin
1
@ BadSkillz - nein. Sitzungswerte werden normalerweise nach Ablauf eines bestimmten Zeitraums zurückgesetzt, ohne dass eine Verbindung vom Client besteht, dem die Sitzung zugeordnet ist. Cookie-Werte werden bis zu ihrem Ablauf gespeichert (oder der Browser wird geschlossen, wenn keiner festgelegt ist). Sofortige Ablaufüberschreibungen sind für beide verfügbar.
Quentin
@ Quentin :) aber wenn wir unseren Browser wieder öffnen, dann bleiben noch Cookies gespeichert
Harsh
54

Cookies werden verwendet, um Sitzungen zu identifizieren. Besuchen Sie eine Website, die Cookies verwendet, und rufen Sie entweder Chrome Inspect Element und dann Network oder FireBug auf, wenn Sie Firefox verwenden.

Sie können sehen, dass ein Header an einen Server gesendet und auch als Cookie empfangen wurde. Normalerweise enthält es einige persönliche Informationen (wie eine ID), die auf dem Server zum Identifizieren einer Sitzung verwendet werden können. Diese Cookies bleiben auf Ihrem Computer und Ihr Browser sendet sie nur an die damit identifizierten Domains.

Wenn es keine Cookies gäbe, würden Sie bei jeder Anfrage eine eindeutige ID über GET oder POST senden. Cookies sind wie statische IDs, die einige Zeit auf Ihrem Computer verbleiben.

Eine Sitzung ist eine Gruppe von Informationen auf dem Server, die den Cookie-Informationen zugeordnet sind. Wenn Sie PHP verwenden, können Sie den Speicherort von session.save_path überprüfen und tatsächlich "Sitzungen anzeigen". Sie sind entweder Dateien auf dem Server-Dateisystem oder werden in einer Datenbank gesichert.

Screenshot eines Cookies

toomasr
quelle
Zusätzliche Punkte für den Hinweis auf Firebug- und Chrome-Entwicklungswerkzeuge.
Dhawan Gayash
Ich habe Informationen zur Sitzung verloren und das Cookie ist aktiv. Dies führt zu Fehlern in der App. Warum ist die Sitzung am besten zu pflegen? Ich speichere Daten während der Sitzung, aber Laravel Maintan Benutzeranmeldung per Cookie und Daten während der Sitzung sind weg. Was kann ich tun oder lesen?
Rubén Ruíz
(diese Weitergabe von Laravel Framework, das ist mein Problem)
Rubén Ruíz
Ist eine Sitzung anders als das Speichern von Dingen in einer Datenbank?
Suraj Jain
Die meisten Sitzungsdaten werden standardmäßig irgendwo auf der Festplatte gespeichert. Für Apache und PHP wird es also im temporären Systemordner gespeichert, oder Sie können es so konfigurieren, dass es an einem anderen Ort gespeichert wird. Auch in einer Datenbank!
Toomasr
15

Der Hauptunterschied zwischen einer Sitzung und einem Cookie besteht darin, dass Sitzungsdaten auf dem Server gespeichert werden, während Cookies Daten im Browser des Besuchers speichern.

Sitzungen sind sicherer als Cookies, da sie auf dem Server gespeichert sind. Cookie kann über den Browser deaktiviert werden.

In Cookies gespeicherte Daten können je nach Lebensdauer des Cookies für Monate oder Jahre gespeichert werden. Die Daten in der Sitzung gehen jedoch verloren, wenn der Webbrowser geschlossen wird.

Armin John
quelle
13

Eine Sitzung ist ein Datenblock, der auf dem Server verwaltet wird und den Status zwischen HTTP-Anforderungen beibehält. HTTP ist grundsätzlich ein zustandsloses Protokoll. Sitzungen werden verwendet, um es Statefulness zu geben.

Ein Cookie ist ein Ausschnitt von Daten, die an Clients gesendet und von diesen zurückgegeben werden. Cookies werden häufig verwendet, um Sitzungen zu vereinfachen , da sie dem Server mitteilen, welcher Client welche Sitzung verarbeitet hat. Es gibt andere Möglichkeiten, dies zu tun (Magie von Abfragezeichenfolgen usw.), aber Cookies sind wahrscheinlich am häufigsten dafür.

Seand
quelle
Ich habe während der Sitzung Informationen verloren. Sie können mir sagen, warum dies am besten gelöst werden kann. Lesen Sie bitte meinen Kommentar zur @ toomasr-Lösung
Rubén Ruíz
6

Cookies werden im Browser als Textdateiformat gespeichert. Es speichert eine begrenzte Datenmenge von bis zu 4 KB [4096 Byte]. Ein einzelnes Cookie kann nicht mehrere Werte enthalten, aber ja, wir können mehr als ein Cookie haben.

Cookies sind leicht zugänglich und daher weniger sicher . Die Funktion setcookie () muss VOR dem Tag angezeigt werden .

Sitzungen werden auf der Serverseite gespeichert. Es gibt keine solche Speicherbeschränkung für Sitzungen. Sitzungen können mehrere Variablen enthalten. Da sie nicht leicht zugänglich sind, sind sie sicherer als Cookies.

Elangovan
quelle
5

Plätzchen

  • ist eine kleine Datenmenge, die im Browser gespeichert wird (clientseitig)

  • kann von PHP mit eingestellt werden setcookieund wird dann an den Browser des Clients gesendet (HTTP-Antwortheader Set-cookie)

  • kann direkt clientseitig in Javascript eingestellt werden: document.cookie = 'foo=bar';

  • Wenn kein Ablaufdatum festgelegt ist, läuft es standardmäßig ab, wenn der Browser geschlossen wird.
    Beispiel: Gehen Sie zu http://example.com , öffnen Sie die Konsole und tun Sie dies document.cookie = 'foo=bar';. Schließen Sie die Registerkarte, öffnen Sie dieselbe Website erneut, öffnen Sie die Konsole und tun document.cookieSie: Sie werden sehen, dass sie foo=barnoch vorhanden ist. Schließen Sie nun den Browser und öffnen Sie ihn erneut. Besuchen Sie dieselbe Website erneut und öffnen Sie die Konsole. Sie werden sehen, document.cookieist leer.

  • Sie können auch ein genaues Ablaufdatum festlegen, das nicht "beim Schließen des Browsers gelöscht" ist.

  • Die im Browser gespeicherten Cookies werden in den Headern jeder Anfrage derselben Website an den Server gesendet (siehe Cookie). Sie können dies beispielsweise bei Chrome anzeigen, indem Sie Entwicklertools> Netzwerk öffnen , auf die Anforderung klicken und unter Kopfzeilen Folgendes anzeigen :

    Geben Sie hier die Bildbeschreibung ein

  • kann clientseitig mit gelesen werden document.cookie

  • kann serverseitig mit gelesen werden $_COOKIE['foo']

  • Bonus: Es kann auch mit einer anderen Sprache als PHP eingestellt / abgerufen werden. Beispiel in Python mit "Flasche" -Mikro-Framework ( siehe auch hier ):

    from bottle import get, run, request, response
    @get('/')
    def index():
        if request.get_cookie("visited"):
            return "Welcome back! Nice to see you again"
        else:
            response.set_cookie("visited", "yes")
            return "Hello there! Nice to meet you"
    run(host='localhost', port=8080, debug=True, reloader=True)
    

Session

  • sind einige Daten in Bezug auf eine Browsersitzung, die serverseitig gespeichert wurde

  • Jede serverseitige Sprache kann sie auf andere Weise implementieren

  • in PHP, wenn session_start();aufgerufen wird:

    • Eine zufällige ID wird vom Server generiert, z jo96fme9ko0f85cdglb3hl6ah6
    • Auf dem Server wird eine Datei gespeichert, die die Daten enthält: z /var/lib/php5/sess_jo96fme9ko0f85cdglb3hl6ah6
    • die Session - ID wird in den HTTP - Response - Header an den Client gesendet, der traditionelle Cookie - Mechanismus detailliert oben : Set-Cookie: PHPSESSID=jo96fme9ko0f85cdglb3hl6ah6; path=/:

      Geben Sie hier die Bildbeschreibung ein

      (Es kann auch über die URL anstelle des Cookies gesendet werden, jedoch nicht über das Standardverhalten.)

    • Sie können die Sitzungs-ID auf der Clientseite anzeigen mit document.cookie:

      Geben Sie hier die Bildbeschreibung ein

  • Das PHPSESSIDCookie wird ohne Ablaufdatum gesetzt und läuft daher ab, wenn der Browser geschlossen wird. Somit sind "Sitzungen" nicht mehr gültig, wenn der Browser geschlossen / wieder geöffnet wird.

  • kann in PHP mit eingestellt / gelesen werden $_SESSION

  • Die Clientseite sieht nicht die Sitzungsdaten, sondern nur die ID: Führen Sie dies aus in index.php:

    <?php
    session_start();
    $_SESSION["abc"]="def";
    ?>
    

    Das einzige, was auf der Clientseite angezeigt wird, ist (wie oben erwähnt) die Sitzungs-ID:

    Geben Sie hier die Bildbeschreibung ein

  • Aus diesem Grund ist die Sitzung nützlich, um Daten zu speichern, die vom Client nicht gesehen oder geändert werden sollen

  • Sie können die Verwendung von Sitzungen vollständig vermeiden, wenn Sie Ihre eigene Datenbank + IDs verwenden und eine ID / ein Token mit einem herkömmlichen Cookie an den Client senden möchten

Basj
quelle
1
Perfekte Erklärung
Irshad Khan
2

Session

Die Sitzung wird verwendet, um einen Dialog zwischen Server und Benutzer aufrechtzuerhalten. Es ist sicherer, da es auf dem Server gespeichert ist und wir nicht einfach darauf zugreifen können. Es bettet Cookies in den Benutzercomputer ein. Es speichert unbegrenzt Daten.

Kekse

Cookies werden auf dem lokalen Computer gespeichert. Grundsätzlich wird die Benutzeridentifikation beibehalten, dh die Besucheraufzeichnung wird verfolgt. Es ist weniger sicher als eine Sitzung. Es speichert eine begrenzte Datenmenge und wird für eine begrenzte Zeit verwaltet.

user7166162
quelle
2

Ein Teil, der in all diesen Erklärungen fehlt, ist, wie Cookies und Session-By-SessionID-Cookies verknüpft sind. Das Cookie wechselt zwischen Client und Server hin und her. Der Server verknüpft den Benutzer (und seine Sitzung) anhand des Sitzungs-ID-Teils des Cookies. Sie können die Sitzungs-ID auch per URL senden (nicht die beste Vorgehensweise) - falls Cookies vom Client deaktiviert werden.

Habe ich das richtig verstanden?

Sam-T
quelle