Cookies vs. Sitzungen

188

Ich habe vor ein paar Monaten angefangen, PHP zu verwenden. Um ein Anmeldesystem für meine Website zu erstellen, habe ich Informationen zu Cookies und Sitzungen und deren Unterschieden gelesen (Cookies werden im Browser des Benutzers und in den Sitzungen auf dem Server gespeichert). Zu dieser Zeit bevorzugte ich Cookies (und wer mag keine Cookies?!) Und sagte nur: "Wen interessiert das? Ich habe kein gutes Geschäft damit, sie auf meinem Server zu speichern", also habe ich Cookies für verwendet mein Bachelor-Abschlussprojekt. Nachdem ich den größten Teil meiner App erledigt hatte, hörte ich, dass für den speziellen Fall des Speicherns der Benutzer-ID Sitzungen besser geeignet sind. Also begann ich darüber nachzudenken, was ich sagen würde, wenn die Jury mich fragt, warum Sie Cookies anstelle von Sitzungen verwendet haben. Ich habe genau diesen Grund (dass ich keine internen Informationen über den Benutzer speichern muss).? oder ist es mehr als das?
Können Sie mir bitte die Vor- und Nachteile der Verwendung von Cookies zur Aufbewahrung der Benutzer-ID erläutern?

Vielen Dank für euch alle in StackOverflow!

Nadjib Mami
quelle
2
Beide Methoden speichern Daten . Cookies tun dies auf der Client-Seite, dh auf der Speicherung der Geräte Ihrer Besucher. Sitzungen sind insofern eine clevere "Erweiterung", als sie nur eine eindeutige ID auf der Clientseite und alle tatsächlichen Daten auf der Serverseite speichern. Wenn sie die eindeutige ID aus dem Cookie des Clients erhalten, wissen sie, welche Daten auf den Server geladen werden müssen. In den meisten Fällen sind Sitzungen genau das, was Sie brauchen. Übrigens können Sie beides mit github.com/delight-im/PHP-Cookie auf modernere Weise verwalten.
Caw
Abgesehen davon hat WordPress Core vor einigen Jahren die Verwendung von Sitzungen aufgegeben und verwendet jetzt ausschließlich Cookies . Interessant. Ich frage mich, ob sie dies getan haben, um die Bereitstellung auf einer Reihe von Servern mit Lastenausgleich zu vereinfachen und / oder zufällige Abmeldungen aufgrund der Speicherbereinigung von Sitzungen zu reduzieren.
Simon East

Antworten:

228

Das Konzept speichert persistente Daten über Seitenladevorgänge für einen Webbesucher. Cookies speichern es direkt auf dem Client. Sitzungen verwenden ein Cookie als eine Art Schlüssel, um die auf der Serverseite gespeicherten Daten zu verknüpfen.

Es wird bevorzugt, Sitzungen zu verwenden, da die tatsächlichen Werte vor dem Client verborgen sind und Sie steuern, wann die Daten ablaufen und ungültig werden. Wenn alles auf Cookies basiert, könnte ein Benutzer (oder Hacker) seine Cookie-Daten manipulieren und dann Anfragen an Ihre Site abspielen.

Bearbeiten: Ich glaube, die Verwendung von Cookies hat keinen anderen Vorteil als die Einfachheit. Betrachten Sie es so ... Hat der Benutzer einen Grund, seine ID-Nummer zu kennen? Normalerweise würde ich nein sagen, der Benutzer benötigt diese Informationen nicht. Das Verteilen von Informationen sollte auf der Grundlage von Wissensbedürfnissen begrenzt werden. Was passiert, wenn der Benutzer sein Cookie so ändert, dass es eine andere ID hat? Wie reagiert Ihre Anwendung? Es ist ein Sicherheitsrisiko.

Bevor die Sitzungen der letzte Schrei waren, hatte ich im Grunde meine eigene Implementierung. Ich habe einen eindeutigen Cookie-Wert auf dem Client gespeichert und meine persistenten Daten zusammen mit diesem Cookie-Wert in der Datenbank gespeichert. Dann habe ich auf Seitenanfragen diese Werte abgeglichen und hatte meine persistenten Daten, ohne dass der Client kontrollieren konnte, was das war.

Fosco
quelle
29
@JiminyCricket Ich glaube nicht, dass das stimmt ... wenn ja, würde niemand Sitzungsvariablen zum Speichern des aktuell angemeldeten Benutzers verwenden - und jeder tut dies. Es wäre ein großes Sicherheitsrisiko. Ziemlich sicher, dass die Sitzungs-ID normalerweise als Cookie auf dem Client-Computer gespeichert und dann serverseitig mit den Sitzungsdaten abgeglichen wird. Der Server steuert Sitzungen normalerweise nicht über die IP-Adresse, sondern über einen Cookie-Wert.
John M.
1
Ich habe vor kurzem wieder angefangen, nur Cookies zu verwenden, nur weil Sitzungen dazu führen, dass Seiten nicht geladen werden, wenn gerade eine andere von derselben Sitzung ausgeführt wird, es sei denn, Sie stellen jeder Seite bei session_write_close();Bedarf ein Vorwort vor . Das Rollen Ihrer eigenen eindeutigen ID und das Abgleichen mit einfachen Cookies war nicht so schwierig und hält alle Seiten schön und bissig.
Brian Leishman
Denken Sie, ich sollte Sitzungen zur Authentifizierung verwenden? Hat es irgendwelche Sicherheitsrisiken? Wie wäre es, wenn ein Hacker versucht, seine Sitzungs-ID zu ändern, wie würde der Server reagieren (vorausgesetzt, die erratene Sitzungs-ID ist gültig)?
O-BL
Verwenden Sie Sitzung und dann 2FA als Sitzung kann entführt werden.
Zakir Sajib
119

Grundideen zur Unterscheidung dieser beiden.

Session:

  1. IDU wird auf dem Server gespeichert (dh serverseitig)
  2. Sicherer (wegen 1)
  3. Der Ablauf kann nicht festgelegt werden. Sitzungsvariablen laufen ab, wenn Benutzer den Browser schließen. (heutzutage wird es standardmäßig 24 Minuten in PHP gespeichert)

Kekse:

  1. IDU wird im Webbrowser gespeichert (dh clientseitig)
  2. Nicht sehr sicher, da Hacker Ihre Informationen erreichen und abrufen können (wegen 1)
  3. Der Ablauf kann festgelegt werden ( weitere Informationen finden Sie unter setcookies () ).

Die Sitzung wird bevorzugt, wenn Sie kurzfristige Informationen / Werte speichern müssen, z. B. Variablen zum Berechnen, Messen, Abfragen usw.

Cookies werden bevorzugt, wenn Sie langfristige Informationen / Werte speichern müssen, z. B. das Benutzerkonto (damit das Konto auch dann noch angemeldet ist, wenn der Computer 2 Tage lang heruntergefahren wird). Ich kann mir nicht viele Beispiele für Cookies vorstellen, da diese in den meisten Situationen nicht übernommen werden.

Reyske
quelle
6
Beachten Sie: Dies ist keine gute Antwort. Es beginnt ganz in Ordnung, verwirrt aber die Dinge und endet mit Desinformation. Dies ist keine Erklärung zu Sitzung oder Cookies. Es ist eine Erklärung von Sitzung gegen Sitzung + Sitzungscookie. Cookies allein werden aus den genannten Gründen nicht bevorzugt. Sitzungen + Sitzungscookies werden aus den angegebenen Gründen bevorzugt.
Markus
Ein weiterer Fehler ist, dass Sie über die PHP-Konfiguration Einfluss auf die Sitzungslebensdauer haben.
Markus
1
Sessions setzt immer noch ein Cookie im Benutzerbrowser, daher ist diese Erklärung auf der Server-Client-Seite nicht korrekt
Zalaboza
Der Ablauf von Sitzungen kann von jeder Anwendung einfach festgelegt werden. Der dritte Punkt ist falsch. Außerdem haben Sie die Datenmenge vergessen, die in Cookie vs Session gespeichert werden kann. Das ist ein wichtigerer Punkt
saran3h
1
Wofür steht IDU?
Simon East
44
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Dies ist der Hauptunterschied in Ihrer Wahl,

Wenn Sie möchten, dass die ID lange gespeichert bleibt, müssen Sie Cookies verwenden. Andernfalls, wenn Sie nur möchten, dass die Website den Benutzer nur für diesen Besuch erkennt, sind Sitzungen der richtige Weg.

Sitzungen werden in einer Datei gespeichert, die Ihr PHP-Server generiert. Um sich zu merken, welche Datei für welchen Benutzer bestimmt ist, setzt PHP auch ein Cookie im Browser des Benutzers, das diese Sitzungsdatei-ID enthält, damit PHP bei ihrem nächsten Besuch diese Datei liest und die Sitzung neu lädt.

Jetzt löscht PHP standardmäßig Sitzungen in jedem Intervall, und auch die Namenskonvention der Sitzung lässt sie automatisch ablaufen. Außerdem behalten Browser das Cookie, das die Sitzungs-ID enthält, nicht mehr bei, sobald der Browser geschlossen oder der Verlauf gelöscht wird.

Es ist wichtig zu beachten, dass heutzutage Browser auch andere Arten von Speicher-Engines wie LocalStorage, SessionStorage und andere Webdb-Engines unterstützen, mit denen Javascript-Code Daten auf Ihrem Computer speichern kann, um sich an Sie zu erinnern. Wenn Sie beispielsweise die Javascript-Konsole in Facebook öffnen und "localStorage" eingeben, werden alle Variablen angezeigt, die Facebook verwendet, um sich ohne Cookies an Sie zu erinnern.

Zalaboza
quelle
16
Tatsächlich dauert eine Sitzung standardmäßig so lange, bis der Benutzer seinen Browser schließt. Dies kann jedoch in der Datei php.ini geändert werden, indem die 0 in session.cookie_lifetime = 0 auf die Anzahl der Sekunden geändert wird, die die Sitzung dauern soll, oder bis using session_set_cookie_params ().
DOK
1
Weitere hilfreiche Informationen, solche Fragen, die viele Antworten bekommen .. toll, nochmals vielen Dank DOK!
Nadjib Mami
1
Denken Sie auch daran, welche Single Point-of-Failure-Sitzungsdateien erstellt werden können. Wenn selbst der kleinste Angriff im Dos-Stil über Proxy, IP-Switcher oder Zombies erfolgt, wird eine Sitzungsdatei auf Ihrer Server-Festplatte oder SSD erstellt. Wenn Sie mit den gelesenen Schreibvorgängen nicht Schritt halten können, wird Ihre Site ausfallen.
Shawn E Carter
kann jemand clafiry: "SITZUNGEN ENDET, WENN DER BENUTZER SEINEN BROWSER SCHLIESST" 1. Was ist, wenn der Benutzer awya von der Seite navigiert? Dann geht er zurück, ohne den Browser zu schließen. 2. Was ist, wenn mehrere Browserfenster / Registerkarten geöffnet sind, die auf dieselbe Site verweisen? Einige Web-Apps bei der Arbeit sind in dieser Situation verwirrt, aber ich weiß nicht, welche Art von Cookies sie verwenden.
Jcansell
1
@jcansell gut, ein Cookie wird nicht durch mehrere Registerkarten oder das Navigieren weg verwirrt. In diesem Fall verwendeten diese Webanwendungen höchstwahrscheinlich lokalen Speicher / Sitzungsspeicher, um Daten mit Javascript zu speichern
Zalaboza
20

Wenn Sie die #ID als Cookie speichern, um angemeldete Benutzer zu erkennen, zeigen Sie Benutzern tatsächlich Daten an, die nicht mit ihnen zusammenhängen. Wenn ein Dritter versucht, zufällige IDs als Cookie-Daten in seinem Browser festzulegen, kann er den Server davon überzeugen, dass er ein Benutzer ist, obwohl dies tatsächlich nicht der Fall ist. Das ist ein Mangel an Sicherheit.

Sie haben Cookies verwendet und wie gesagt bereits den größten Teil des Projekts abgeschlossen. Außerdem hat Cookie das Privileg, lange zu bleiben, während Sitzungen schneller enden. Sitzungen sind in diesem Fall also nicht geeignet. In Wirklichkeit verwenden viele berühmte und beliebte Websites und Dienste Cookies, und Sie können lange Zeit angemeldet bleiben. Aber wie können Sie ihre Methode verwenden, um einen sichereren Anmeldevorgang zu erstellen?

Hier ist die Idee: Sie können bei der Verwendung von Cookies helfen: Wenn Sie zufällige Schlüssel anstelle von IDs verwenden, um angemeldete Benutzer zu erkennen, geben Sie Ihre Primärdaten erstens nicht an zufällige Benutzer weiter, und zweitens, wenn Sie den Zufall berücksichtigen Schlüssel groß genug, Es wird für jeden schwieriger sein, einen Schlüssel zu erraten oder einen zufälligen zu erstellen. Sie können beispielsweise einen Schlüssel mit einer Länge von 40 wie diesen im Browser des Benutzers speichern: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn", und es ist weniger wahrscheinlich, dass jemand den genauen Schlüssel erstellt und vorgibt, jemand anderes zu sein.

Makan Tayebi
quelle
1
Schöne Erklärung. Ich benutze GUID im Token, um einzelne Benutzer zu erkennen.
Karthik
16

Kurze Antwort

Nach Priorität geordnete Regeln:

  • Regel 1. Vertrauen Sie niemals Benutzereingaben: Cookies sind nicht sicher. Verwenden Sie Sitzungen für vertrauliche Daten.
  • Regel 2. Wenn beim Schließen des Browsers dauerhafte Daten verbleiben müssen, verwenden Sie Cookies.
  • Regel 3. Wenn beim Schließen des Browsers keine dauerhaften Daten verbleiben müssen, verwenden Sie Sitzungen.
  • Regel 4. Lesen Sie die ausführliche Antwort!

Quelle: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Detaillierte Antwort

Kekse

  • Cookies werden auf der Client-Seite (im Browser des Besuchers) gespeichert.
  • Cookies sind nicht sicher: Es ist recht einfach, Cookie-Inhalte zu lesen und zu schreiben.
  • Wenn Sie Cookies verwenden, müssen Sie Besucher gemäß den europäischen Gesetzen (DSGVO) benachrichtigen.
  • Der Ablauf kann festgelegt werden, aber Benutzer oder Browser können ihn ändern.
  • Benutzer (oder Browser) können die Verwendung von Cookies ablehnen.

Sitzungen

  • Sitzungen werden auf der Serverseite gespeichert.
  • Sitzungen verwenden Cookies (siehe unten).
  • Sitzungen sind sicherer als Cookies, aber nicht unverwundbar.
  • Der Ablauf wird in der Serverkonfiguration festgelegt (z. B. php.ini).
  • Die Standardablaufzeit beträgt 24 Minuten oder wenn der Browser geschlossen wird.
  • Der Ablauf wird zurückgesetzt, wenn der Benutzer eine neue Seite aktualisiert oder lädt.
  • Benutzer (oder Browser) können die Einstellung von Cookies ablehnen, daher Sitzungen.
  • Rechtlich gesehen müssen Sie auch Besucher für das Cookie benachrichtigen, aber das Fehlen eines Präzedenzfalls ist noch nicht klar.

Die richtige Wahl

Sitzungen verwenden einen Cookie! Sitzungsdaten werden auf der Serverseite gespeichert, aber eine UID wird auf der Clientseite in einem Cookie gespeichert. Dadurch kann der Server einen bestimmten Benutzer mit den richtigen Sitzungsdaten abgleichen. UID ist geschützt und schwer zu hacken, aber nicht unverwundbar. Verlassen Sie sich bei vertraulichen Aktionen (Ändern der E-Mail oder Zurücksetzen des Kennworts) weder auf Sitzungen noch auf Cookies: Fragen Sie nach dem Benutzerkennwort, um die Aktion zu bestätigen.

Sensible Daten sollten niemals in Cookies gespeichert werden (E-Mails, verschlüsselte Passwörter, persönliche Daten ...). Beachten Sie, dass die Daten auf einem fremden Computer gespeichert sind. Wenn der Computer nicht privat ist (Klassenzimmer oder öffentliche Computer), kann möglicherweise jemand anderes den Inhalt der Cookies lesen.

Remember-me- Daten müssen in Cookies gespeichert werden, sonst gehen Daten verloren, wenn der Benutzer den Browser schließt. Speichern Sie jedoch kein Passwort oder persönliche Benutzerdaten im Cookie "Remember-Me". Speichern Sie Benutzerdaten in der Datenbank und verknüpfen Sie diese Daten mit einem verschlüsselten Paar von ID / Schlüssel, das in einem Cookie gespeichert ist.

Nach Prüfung der vorherigen Empfehlungen ist die folgende Frage schließlich hilfreich, um zwischen Cookies und Sitzungen zu wählen:

Müssen persistente Daten erhalten bleiben, wenn der Benutzer den Browser schließt?

  • Wenn die Antwort ja ist , verwenden Sie Cookies .
  • Wenn die Antwort lautet Nein , verwenden Sie Sitzungen .
Fifi
quelle
13

Tatsächlich sind Sitzung und Cookies nicht immer getrennte Dinge. In der Sitzung werden häufig, aber nicht immer, Cookies verwendet.

In diesen anderen Fragen finden Sie einige gute Antworten auf Ihre Frage. Da es bei Ihrer Frage speziell um das Speichern der IDU (oder ID) des Benutzers geht, denke ich nicht, dass es sich um ein Duplikat dieser anderen Fragen handelt, aber ihre Antworten sollten Ihnen helfen.

Cookies gegen Sitzung

Cache VS Session VS Cookies?

Was ist der Unterschied zwischen einer Sitzung und einem Cookie?

DOK
quelle
10

Ich persönlich verwende sowohl Cookies als auch Sitzungen.

Cookies werden nur verwendet, wenn der Benutzer das Kontrollkästchen "An mich erinnern" aktiviert. Außerdem werden Cookies verschlüsselt und Daten nur auf dem Server entschlüsselt . Wenn jemand versucht, Cookies zu bearbeiten, kann unser Entschlüsseler diese erkennen und die Anfrage ablehnen.

Ich habe so viele Websites gesehen, auf denen Anmeldeinformationen in Cookies gespeichert sind , dass jeder einfach die ID und den Benutzernamen des Benutzers in Cookies ändern kann, um auf ein Konto zuzugreifen.

Vielen Dank,

Muhammad Sanaullah
quelle
2

Sitzung und Cookie sind nicht dasselbe.

In einer Sitzung werden die Informationen von den Webseiten gespeichert. Normalerweise haben Webseiten keine Speicher zum Speichern dieser Informationen. Aber mit können wir die notwendigen Informationen speichern.

Cookie wird jedoch verwendet, um die Benutzer zu identifizieren. Mit Cookies können wir die Daten speichern. Es ist ein kleiner Teil der Daten, die im Webbrowser des Benutzers gespeichert werden. Wenn der Benutzer das nächste Mal im Browser surft, sendet er die Cookie-Dateninformationen an den Server zurück, um die vorherigen Aktivitäten abzurufen.

Credits: Sitzung und Cookie

user3824494
quelle
Was ist, wenn der Benutzer Cookies deaktiviert hat? Wie Cookie Benutzer identifizieren?
SohailRajput
1

In Sitzungen können Sie einzelne Informationen wie bei Cookies speichern, die Daten werden jedoch auf dem Server anstatt auf dem Client gespeichert.

Fuddin
quelle
0

Wie andere sagten, sind Sitzungen klug und haben den größeren Vorteil, die Informationen vor dem Kunden zu verbergen.

Cookie hat jedoch noch mindestens einen Vorteil : Sie können über Javascript auf Ihre Cookies zugreifen (z . B. ngCookies ). Mit einer PHP-Sitzung können Sie außerhalb des PHP-Skripts nirgendwo darauf zugreifen.

Kamalakannan J.
quelle
1
Sie können .. Natürlich nicht direkt, aber Sie können über eine Ajax-Anfrage an das Skript, das Sitzungsdaten zurückgibt, darauf zugreifen. Aber ich bin mir nicht sicher, ob du das solltest.
100k
0

Ich werde Sitzung auswählen. Zunächst ist die Sitzung sicherer als Cookies, Cookies sind Client-Site-Daten und Sitzung sind Server-Site-Daten. Cookies werden verwendet, um einen Benutzer zu identifizieren, da es sich um kleine Codeteile handelt, die in meinen Server mit dem Computer des Benutzers eingebettet sind. Auf der anderen Seite hilft Ihnen Session dabei, Ihre Identität zu sichern, da der Webserver nicht weiß, wer Sie sind, weil die HTTP-Adresse den Status 192.168.0.1 in 765487cf34ert8ded ändert… ..oder andere Nummern mithilfe von GET- und POST-Methoden. In der Sitzung werden Benutzerdaten in einer Sitzung mit eindeutiger ID gespeichert, die selbst mit der Benutzer-ID nicht übereinstimmen können. In der Sitzung werden Einzelbenutzerinformationen auf allen Seiten einer Anwendung gespeichert. Das Ablaufen von Cookies wird mit Hilfe von setcookies () festgelegt, während das Ablaufen von Sitzungen nicht festgelegt wird. Es läuft ab, wenn Benutzer Browser deaktivieren.

Wasiq Mahmood WM
quelle
0

Eine Sitzung ist eine Gruppe von Informationen auf dem Server, die den Cookie-Informationen zugeordnet sind. Wenn Sie PHP verwenden, können Sie die Sitzung überprüfen. Speichern Sie den Pfadpfad und sehen Sie tatsächlich "Sitzungen sehen". 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.

Megersa
quelle