Der Unterschied und die Verwendung von Sitzung, Cookie, Token

Der Organisationskontext dieses Artikels lautet wie folgt

Cookie 和 Sitzung

Das HTTP-Protokoll ist ein Typ 无状态协议, dh jedes Mal, wenn der Server eine Clientanforderung empfängt, handelt es sich um eine brandneue Anforderung, und der Server kennt den historischen Anforderungsdatensatz des Clients nicht. Der Hauptzweck von Sitzung und Cookie besteht darin, dies auszugleichen die staatenlose Natur von HTTP.

Was ist Sitzung?

Der Client fordert den Server an, und der Server öffnet einen Block für diese Anforderung 内存空间. Dieses Objekt ist das Sitzungsobjekt und die Speicherstruktur  ConcurrentHashMap. Die Sitzung gleicht den zustandslosen Charakter von HTTP aus. Der Server kann mithilfe der Sitzung einige Operationsdatensätze des Clients während derselben Sitzung speichern.

So stellen Sie fest, ob es sich bei der Sitzung um dieselbe Sitzung handelt

Wenn der Server die Anforderung zum ersten Mal empfängt, öffnet er einen Sitzungsbereich (erstellt ein Sitzungsobjekt), generiert gleichzeitig eine Sitzungs-ID und sendet über das Set-Cookie: JSESSIONID eine Antwort, in der die Cookie-Einstellung angefordert wird, an den Client = XXXXXXX-Befehl im Antwortheader; Nachdem der Client die Antwort erhalten hat, setzt er auf dem lokalen Client ein Cookie mit JSESSIONID = XXXXXXX. Die Ablaufzeit des Cookies ist das Ende der Browsersitzung.

Als nächstes enthält der Anforderungsheader jedes Mal, wenn der Client eine Anforderung an dieselbe Website sendet, die Cookie-Informationen (einschließlich der Sitzungs-ID). Anschließend liest der Server die Cookie-Informationen im Anforderungsheader und erhält den Wert JSESSIONID, um den Wert von abzurufen JSESSIONID. Die angeforderte Sitzungs-ID.

Nachteile der Sitzung

Der Sitzungsmechanismus weist ein Manko auf. Beispielsweise speichert Server A die Sitzung. Wenn nach dem Lastausgleich das Zugriffsvolumen von A über einen bestimmten Zeitraum stark ansteigt, wird es zum Zugriff an B weitergeleitet, während Server B keine A speichert Sitzung, die zum Ausfall der Sitzung führt.

Was sind Cookies?

Das Cookie-HTTP-Protokoll umfasst  Web Cookie und 浏览器 Cookie, der Server sendet es an den Webbrowser eines kleinen Datenblocks. Das vom Server an den Browser gesendete Cookie wird vom Browser gespeichert und zusammen mit der nächsten Anforderung an den Server gesendet. Normalerweise wird es verwendet, um festzustellen, ob zwei Anforderungen von demselben Browser stammen, z. B. bleibt der Benutzer angemeldet.

Der HTTP-Cookie-Mechanismus ist eine Ergänzung und Verbesserung des zustandslosen HTTP-Protokolls

Cookies werden hauptsächlich für die folgenden drei Zwecke verwendet

  • 会话管理

Login, Warenkorb, Spielstand oder andere Dinge, an die sich der Server erinnern sollte

  • 个性化

Benutzereinstellungen, Themen oder andere Einstellungen

  • 追踪

Benutzerverhalten aufzeichnen und analysieren

Cookies wurden früher für die allgemeine Speicherung von Clients verwendet. Obwohl dies legal ist, da dies die einzige Möglichkeit ist, Daten auf dem Client zu speichern, wird jetzt empfohlen, moderne Speicher-APIs zu verwenden. Cookies werden bei jeder Anfrage gesendet, sodass sie die Leistung beeinträchtigen können (insbesondere bei mobilen Datenverbindungen).

Cookie erstellen

Wenn eine HTTP-Anfrage von einem Client empfangen wird, kann der Server einen Set-Cookie Header mit einer Antwort senden  . Das Cookie wird normalerweise vom Browser gespeichert, und dann werden das Cookie und der HTTP-Header kombiniert, um eine Anfrage an den Server zu senden.

Set-Cookie und Cookie-Header

Set-Cookie Der HTTP-Antwortheader sendet das Cookie vom Server an den Benutzeragenten. Das folgende Beispiel zeigt das Senden von Cookies

Dieser Header weist den Client an, Cookies zu speichern

Bei jeder neuen Anforderung an den Server verwendet der Browser nun den Cookie-Header, um alle zuvor gespeicherten Cookies an den Server zurückzusenden.

Es gibt zwei Arten von Cookies: Sitzungscookies und dauerhafte Cookies. Wenn das Cookie kein Ablaufdatum enthält, wird es als Sitzungscookie betrachtet. Das Sitzungscookie wird im Speicher gespeichert und niemals auf die Festplatte geschrieben. Wenn der Browser geschlossen wird, geht das Cookie danach dauerhaft verloren. Wenn das Cookie enthält 有效期 , wird es als dauerhaftes Cookie behandelt. Am angegebenen Ablaufdatum wird das Cookie von der Festplatte gelöscht.

Es gibt noch eine andere  Cookie的 Secure 和 HttpOnly 标记, die wir unten einzeln vorstellen

Sitzungscookies

Im obigen Beispiel wird ein Sitzungscookie erstellt. Das Sitzungscookie verfügt über eine Funktion. Das Cookie wird gelöscht, wenn der Client geschlossen wird, da es keine Bezeichnung Expiresoder  Max-Age Anweisung hat.

Webbrowser verwenden jedoch möglicherweise die Sitzungswiederherstellung, wodurch die meisten Sitzungscookies dauerhaft sind, als ob der Browser nie geschlossen worden wäre.

Dauerhafte Cookies

Permanente Cookies verfallen nicht, wenn der Client geschlossen wird, sondern verfallen nach 特定日期(Expires)oder 特定时间长度(Max-Age)außerhalb. Z.B

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Cookie's Secure- und HttpOnly-Tags

Das sichere Cookie muss verschlüsselt über das HTTPS-Protokoll an den Server gesendet werden. Selbst wenn es sicher ist, sollten vertrauliche Informationen nicht in Cookies gespeichert werden, da sie von Natur aus unsicher sind und dieses Flag keinen wirklichen Schutz bietet.

Die Rolle von HttpOnly

  • Das Fehlen des HttpOnly-Attributs im Sitzungscookie führt dazu, dass ein Angreifer die Cookie-Informationen des Benutzers über Programme (JS-Skript, Applet usw.) abruft, wodurch die Cookie-Informationen des Benutzers verloren gehen und die Bedrohung des Angreifers durch Cross-Site-Scripting zunimmt Anschläge.

  • HttpOnly ist die Erweiterung von Microsoft zu Cookie. Dieser Wert gibt an, ob auf das Cookie über clientseitige Skripts zugegriffen werden kann.

  • Wenn das HttpOnly-Attribut im Cookie nicht auf true gesetzt ist, wird das Cookie möglicherweise gestohlen. Gestohlene Cookies können vertrauliche Informationen enthalten, die Site-Benutzer identifizieren, z. B. ASP.NET-Sitzungs-IDs oder Forms-Authentifizierungstickets. Angreifer können die gestohlenen Cookies erneut abspielen, um sich als Benutzer auszugeben oder vertrauliche Informationen zu erhalten, Cross-Site-Scripting-Angriffe durchzuführen usw.

Umfang der Cookies

Domain Das  Path Logo definiert den Umfang des Cookies: An welche URL das Cookie gesendet werden soll.

Domain Die Kennung gibt an, welche Hosts Cookies akzeptieren können. Wenn nicht angegeben, wird standardmäßig der aktuelle Host verwendet ( ohne Subdomains ). Wenn angegeben Domain, enthält es im Allgemeinen den Namen der Subdomain.

Wenn diese Domain=mozilla.orgOption beispielsweise festgelegt ist  , ist das Cookie auch in der Subdomain enthalten (z developer.mozilla.org. B. ).

Wenn Sie beispielsweise festlegen  Path=/docs, stimmen die folgenden Adressen überein:

  • /docs

  • /docs/Web/

  • /docs/Web/HTTP

Vergleich von JSON-Web-Token- und Sitzungscookies

JSON Web Token ,简称 JWT, Es und beide  Sessionkönnen Benutzerauthentifizierung für die Website bereitstellen, aber sie sind nicht dasselbe.

Das Folgende ist eine Studie über den Unterschied zwischen JWT und Sitzung

Ähnlichkeiten zwischen JWT und Sitzungscookies

Bevor Sie über JWT- und Sitzungscookies sprechen, müssen Sie deren Ähnlichkeiten verstehen.

Sie können zur Authentifizierung von Benutzern und zur Authentifizierung von Benutzern verwendet werden, wenn sie auf eine andere Seite klicken und sich bei einer Website oder Anwendung anmelden.

Wenn Sie diese beiden nicht haben, müssen Sie sich möglicherweise bei jedem Seitenwechsel anmelden. Weil HTTP ein zustandsloses Protokoll ist. Dies bedeutet, dass sich der Server 内存中nicht an Ihre vorherigen Aktionen erinnert , wenn Sie eine Webseite besuchen und dann auf eine andere Seite auf derselben Site klicken .

Wenn Sie sich anmelden und eine andere Seite besuchen, auf die Sie Zugriff haben, melden Sie sich erneut an, da HTTP die gerade angemeldeten Informationen nicht aufzeichnet.

JWT- und Sitzungscookies werden verwendet, um zwischen verschiedenen Seiten zu wechseln und Benutzeranmeldeinformationen zu speichern .

Mit anderen Worten, diese beiden Technologien werden verwendet, um Ihren Anmeldestatus zu speichern und Ihnen das Durchsuchen jeder kennwortgeschützten Website zu ermöglichen. Dieses Problem wird gelöst, indem Benutzerdaten jedes Mal authentifiziert werden, wenn eine neue Anforderung gestellt wird.

Was sind die Ähnlichkeiten zwischen JWT und Sitzungscookies? Das heißt, sie können Sie dabei unterstützen, einen Mechanismus Ihres Anmeldestatus zwischen dem Senden verschiedener Anforderungen aufzuzeichnen und zu überprüfen.

Was sind Sitzungscookies?

Sitzungscookies werden auch als 会话 CookiesSitzungscookies bezeichnet . In Sitzungscookies wird der Anmeldestatus des Benutzers in 服务器der 内存Mitte gespeichert . Wenn sich der Benutzer anmeldet, wird die Sitzung sicher vom Server erstellt.

Bei jeder Anforderung liest der Server die Sitzungs-ID aus dem Sitzungscookie. Wenn die Daten auf dem Server mit der gelesenen Sitzungs-ID übereinstimmen, sendet der Server eine Antwort an den Browser, damit sich der Benutzer anmelden kann.

Was ist Json Web Tokens?

Die Abkürzung für Json Web Token lautet JWT und kann normalerweise aufgerufen werden  Json 令牌. Es ist als eine Form der Informationsübertragung  RFC 7519 definiert . Die im JWT gespeicherten Informationen werden weitergegeben , sodass sie vertrauenswürdig und verständlich sind. Sie können den HMAC-Algorithmus oder den öffentlichen / privaten RSA / ECDSA-Schlüssel verwenden, um die JWT zu signieren.安全的Json 对象数字签名

Die Verwendung von JWT wird hauptsächlich für die folgenden zwei Punkte verwendet

  • 认证(Authorization): Dies ist der häufigste Fall bei der Verwendung von JWT. Sobald sich der Benutzer anmeldet, enthält jede nachfolgende Anforderung die JWT, sodass der Benutzer auf die vom Token zugelassenen Routen, Dienste und Ressourcen zugreifen kann. 单点登录Es ist eine Funktion von JWT, die heute aufgrund ihres geringen Overheads weit verbreitet ist.

  • 信息交换(Information Exchange): JWT ist eine Möglichkeit, Informationen sicher zu übertragen. Das JWT wird mit dem öffentlichen / privaten Schlüssel signiert und authentifiziert. Da die Signatur verwendet  head und  payload berechnet wird, können Sie außerdem überprüfen, ob der Inhalt manipuliert wurde.

JWT-Format

Im Folgenden werden wir die Zusammensetzung und das Format von JWT diskutieren

JWT besteht hauptsächlich aus drei Teilen, wobei jeder Teil . in drei Teile unterteilt  ist

  • Header

  • Payload

  • Signature

Daher wäre eine sehr einfache JWT-Zusammensetzung wie folgt

Dann diskutieren wir die verschiedenen Teile getrennt.

Header

Header ist der Header von JWT, er besteht normalerweise aus zwei Teilen: 令牌的类型(即 JWT)und wird verwendet  签名算法, z. B. HMAC SHA256 oder RSA.

Z.B

{
  "alg": "HS256",
  "typ": "JWT"
}

Nach Angabe des Typs und des Signaturalgorithmus wird der Json-Block  Base64Url codiert, um den ersten Teil des JWT zu bilden.

Nutzlast

Der zweite Teil des Tokens besteht darin,  Payloaddass die Payload eine Anweisung enthält. Eine Anweisung ist eine Anweisung über eine Entität (normalerweise einen Benutzer) und andere Daten. Es gibt drei Arten von Erklärungen: registrierte, öffentliche und private  Erklärungen.

  • registered 声明: Enthält eine Reihe empfohlener vordefinierter Erklärungen, hauptsächlich einschließlich

  • public 声明: Öffentliche Erklärung: Sie können alle Informationen hinzufügen, im Allgemeinen benutzerbezogene Informationen oder andere erforderliche Informationen, die vom Unternehmen benötigt werden. Es wird jedoch nicht empfohlen, vertrauliche Informationen hinzuzufügen, da dieser Teil auf dem Client entschlüsselt werden kann.

  • private 声明: Benutzerdefinierte Erklärungen, die darauf abzielen, Informationen zwischen Parteien auszutauschen, die sich bereit erklären, diese zu verwenden, sind weder Registrierungserklärungen noch öffentliche Erklärungen.

Z.B

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

Dann wird der Payload-Json-Block Base64Url codiert, um den zweiten Teil des JWT zu bilden.

Unterschrift

Der dritte Teil von JWT ist eine Visa-Information, diese Visa-Information besteht aus drei Teilen

  • Header (nach base64)

  • Nutzlast (nach base64)

  • Geheimnis

Zum Signieren benötigen wir beispielsweise den HMAC SHA256-Algorithmus zum Signieren

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Die Signatur wird verwendet, um zu überprüfen, ob sich die Nachricht während des Vorgangs nicht geändert hat. Bei Token, die mit einem privaten Schlüssel signiert sind, kann auch die wahre Identität des Absenders der JWT überprüft werden

Zusammenstückeln

Jetzt fügen wir die oben genannten drei durch Punkte getrennten Base64-URL-Zeichenfolgenteile zusammen. Diese Zeichenfolge kann diese Zeichenfolgen in HTML- und HTTP-Umgebungen problemlos übergeben.

Das Folgende ist ein vollständiges JWT-Beispiel, das den Header und die Nutzdaten codiert und dann die Signatur zum Signieren verwendet

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Wenn Sie selbst testen und schreiben möchten, können Sie die offizielle JWT-Website https://jwt.io/#debugger-io besuchen

    Der Unterschied zwischen JWT- und Sitzungscookies

Sowohl JWT- als auch Sitzungscookies bieten eine sichere Benutzerauthentifizierung, unterscheiden sich jedoch in den folgenden Punkten

Kryptografische Signatur

JWT hat eine kryptografische Signatur, Sitzungscookies jedoch nicht.

JSON ist staatenlos

JWT Ja 无状态, da die Deklaration im Serverspeicher 客户端und nicht im Serverspeicher gespeichert ist.

Die Authentifizierung kann 本地durchgeführt werden, anstatt den Server anzufordern, muss eine Datenbank oder dergleichen in Position sein. Dies bedeutet, dass der Benutzer mehrmals authentifiziert werden kann, ohne mit der Datenbank der Site oder Anwendung kommunizieren zu müssen und ohne dabei viele Ressourcen zu verbrauchen.

Skalierbarkeit

Sitzungscookies werden im Serverspeicher gespeichert. Wenn die Website oder Anwendung groß ist, verbraucht sie viele Ressourcen. Da JWTs zustandslos sind, können sie in vielen Fällen Serverressourcen sparen. Daher ist JWT stärker als Sitzungscookies 可扩展性.

JWT unterstützt die domänenübergreifende Authentifizierung

Sitzungscookies können nur darin verwendet werden 单个节点的域oder sind darin 子域gültig. Wenn sie versuchen, über den dritten Knoten zuzugreifen, werden sie gesperrt. Dies ist ein Problem, wenn Ihre Website eine sichere Verbindung mit anderen Websites herstellen soll.

Die Verwendung von JWT kann dieses Problem lösen. Die Verwendung von JWT kann die 多个节点Benutzerauthentifizierung bestehen, was wir oft sagen 跨域认证.

Auswahl von JWT- und Sitzungscookies

Wir haben den Unterschied zwischen JWT und Cookies oben besprochen. Ich glaube, Sie werden grob gesagt auch ein tieferes Verständnis für die Auswahl haben

Für kleine und mittlere Websites, die sich nur anmelden und auf einige in der Site-Datenbank gespeicherte Informationen zugreifen müssen, sind Sitzungscookies normalerweise ausreichend.

Wenn Sie Websites, Anwendungen oder Standorte in der Nähe auf Unternehmensebene haben und eine große Anzahl von Anforderungen bearbeiten müssen, insbesondere von Drittanbietern oder vielen Drittanbietern (einschließlich APIs in verschiedenen Domänen), ist JWT offensichtlich besser geeignet.

Nachtrag

Ich habe diese Frage vor zwei Tagen während des Interviews gestellt, also habe ich einen Artikel geschrieben, um sie zusammenzufassen, und ich habe auch eine Interviewfrage gestellt, in der Cookies deaktiviert wurden, wie man Session verwendet  . Ich habe es auf Baidu überprüft und festgestellt, dass dies eine PHP-Interviewfrage ist, em .....

Nach dem Deaktivieren von Cookies möchte ich jedoch immer noch verstehen, wie die Sitzung verwendet wird

  • Wenn Cookies deaktiviert sind, sendet der Server die Sitzungs-ID weiterhin in Form eines Cookies an den Browser, der Browser speichert dieses Cookie jedoch nicht mehr (dh die Sitzungs-ID).

  • Wenn Sie die Sitzung weiterhin verwenden möchten, müssen Sie  URL 重写 die Methode verwenden, um dies zu erreichen. Weitere Informationen finden Sie unter https://www.cnblogs.com/Renyi-Fan/p/11012086.html

Verwandte Referenzen:

https://www.cnblogs.com/Renyi-Fan/p/11012086.html

https://blog.csdn.net/qq_28296925/article/details/80921585

https://www.cnblogs.com/-ROCKS/p/6108556.html

https://www.allaboutcookies.org/manage-cookies/

https://www.jianshu.com/p/4a124a10fcaf

https://tools.ietf.org/html/rfc7519

https://jwt.io/introduction/

https://wp-rocket.me/blog/browser-cache-vs-cookies-difference/

https://wp-rocket.me/blog/difference-json-web-tokens-vs-session-cookies/

Ich denke du magst

Origin blog.csdn.net/qq_39331713/article/details/105369509
Empfohlen
Rangfolge