11.2. Sessions und Cookies#

Um zu verstehen, was Sessions und Cookies eigentlich sind, müssen wir nochmal zum HTTP-Protokoll zurückkehren. HTTP ist nämlich “zustandslos”, es übermittelt keine Informationen über vergangene Seitenaufrufe. Das heißt, dass ein Webserver nicht anhand einer simplen HTTP-Anfrage erkennen kann, ob derselbe Client bereits zuvor eine Anfrage gestellt hat. Etwas formeller ausgedrückt:

HTTP is stateless: there is no link between two requests being successively carried out on the same connection. This immediately has the prospect of being problematic for users attempting to interact with certain pages coherently, for example, using e-commerce shopping baskets. But while the core of HTTP itself is stateless, HTTP cookies allow the use of stateful sessions. Using header extensibility, HTTP Cookies are added to the workflow, allowing session creation on each HTTP request to share the same context, or the same state.

Quelle: MDN Contributors (2023)

Damit der Webserver denselben Client wiedererkennen kann, ist also eine zusätzliche Information notwendig: ein sogenannter Cookie, den der Server dem Client beim ersten Seitenaufruf übermittelt, und den der Client beim wiederholten Seitenaufruf im Header einer HTTP-Anfrage dem Server wieder zusendet. So kann der Client dem Webserver bei einer HTTP-Anfrage zusätzliche Informationen übermitteln. Formell ausgedrückt:

An HTTP cookie (web cookie, browser cookie) is a small piece of data that a server sends to a user’s web browser. The browser may store the cookie and send it back to the same server with later requests. Typically, an HTTP cookie is used to tell if two requests come from the same browser—keeping a user logged in, for example. It remembers stateful information for the stateless HTTP protocol.

Quelle: MDN Contributors (2023)

Beim Aufruf einer Webseite werden meist mehrere Cookies als Schlüssel-Wert-Paare übermittelt. Darunter befindet sich insbesondere bei Loginvorgängen häufig ein Cookie, der eine ID für die aktuelle Session, also für eine Benutzersitzung, enthält. Anhand des Session-ID Cookies erkennt der Webserver, dass derselbe Client bereits zuvor die Webseite aufgerufen hat, und die in anderen Cookies gespeicherten Informationen können so beim wiederholten Seitenaufruf wiederverwendet werden. Je nach der Art der Dienste, für die auf einer Webseite Cookies verwendet werden, haben Sessions eine unterschiedliche Gültigkeitsdauer: Beim Login in ein Onlinebanking-Account sind das oft nur wenige Minuten, während Sessions beim Login in ein soziales Netzwerk sogar wochenlang aufrechterhalten werden können. Wenn die Gültigkeit einer Session erlischt, dann wird die Session-ID gelöscht und ein:e Nutzer:in wird beim nächsten Seitenaufruf zum erneuten Login aufgefordert.

Das Prinzip von Session-ID-Cookies ist in etwa vergleichbar mit einer Garderobe: Bei der Abgabe eines Kleidungsstücks bekommt man einen Abholschein mit einer einzigartigen Nummer, anhand derer die Person an der Garderobe später das abgegebene Kleidungsstück wieder der richtigen Person zuordnen kann. Wenn die Person das Kleidungsstück erhalten hat, hat der Abholschein keine Bedeutung mehr und wird in den Müll geworfen. Dieses Video erläutert Cookies und Sessions anschaulich mithilfe der Garderoben-Analogie. Hier findet ihr eine etwas allgemeinere Erläuterung.

Cookies können ebenfalls über die Browser-Entwicklertools eingesehen werden. Nachdem beim Aufruf des Onlineshops conrad.com die Option “Decline Cookies” im Pop-Up-Cookiebanner ausgewählt wurde, sind in den Entwicklertools nur noch die funktionalen Cookies sichtbar, darunter auch ein Cookie mit dem Namen “session-id-cookie” und einer Session-ID als Wert.

Conrad Beispiel

Fig. 11.4 Session-ID-Cookie in den Entwicklertools beim Aufruf der Seite conrad.com#

Das Beispiel zeigt auch noch einmal, dass Cookiebanner häufig missverständlich formuliert sind: Mit “Cookies ablehnen” sind meist nicht die funktionalen Cookies gemeint, also Cookies, welche für die Funktionalität der Webseite erforderlich sind, sondern nur solche, die zum Verfolgen des Nutzerverhaltens (Tracking) und zu Werbezwecken dienen.

Als Nächstes schauen wir uns an, wie beim Web Scraping mit Sessions, Cookies und Cookiebannern umgegangen werden kann. Beachtet aber, dass die Codebeispiele aus diesem Abschnitt nicht immer aktuell sind und eher allgemeine, in manchen Fällen sinnvolle Vorgehensweisen erläutern. Die rechtliche Zulässigkeit der Vorgehensweisen hängt aber vom Einzelfall ab, beachtet dazu den folgenden Hinweis.

Note

Cookies können auch über die Browser-Entwicklertools gelöscht werden: und zwar mit Ctrl bzw. Cmd + Shift + P und Suche nach “Clear site data”.

Warning

Genauso wie beim im Kapitel 11.1 geschilderten Verwenden der Fetch/XHR Schnittstelle, solltet ihr die hier dargestellten Vorgehensweisen nicht pauschal anwenden, sondern auch hier solltet ihr ganz genau schauen, welche Daten ihr dadurch abfragt und wie ihr dabei vorgeht. Der Grund sind wieder die sogenannten “Hacker-Paragrafen”, die in Deutschland das Abfangen und Ausspähen von Daten aus einer nichtöffentlichen Datenübermittlung unter Strafe stellen. Mehr Informationen dazu findet ihr im Kapitel 11.1.

11.2.5. Quellen#

  1. Klaus Meffert. CSRF Cookies zur Gefahrenabwehr: Bedeutung und Problem mit dem Datenschutz. 2022. URL: https://dr-dsgvo.de/csrf-cookies-zur-gefahrenabwehr-bedeutung-und-problem-mit-dem-datenschutz/.

  2. Ryan Mitchell. Webscraping with Python. Collecting More Data from the Modern Web. O'Reilley, Farnham et al., 2018.

  3. Kenneth Reitz. Requests Documentation: Advanced Usage. Session Objects. 2023. URL: https://requests.readthedocs.io/en/latest/user/advanced/#session-objects.

  4. Kenneth Reitz. Requests Documentation: Cookies. 2023. URL: https://requests.readthedocs.io/en/latest/user/quickstart/?highlight=cookie#cookies.

  5. MDN Contributors. An Overview of HTTP: HTTP Is Stateless, but Not Sessionless. 2023. URL: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview#http_is_stateless_but_not_sessionless.

  6. MDN Contributors. Using HTTP Cookies. 2023. URL: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies.

  7. Python 3.11.3 Documentation. http.cookiejar — Cookie handling for HTTP clients. URL: https://docs.python.org/3/library/http.cookiejar.html.

  8. Selenium 4 Documentation. Driver Sessions. 2022. URL: https://www.selenium.dev/documentation/webdriver/drivers/.

  9. Valentin Despa. Difference between Cookies, Session and Tokens. 2021. URL: https://www.youtube.com/watch?v=GhrvZ5nUWNg.

  10. Valentin Despa. What are Cookies and How to Get Rid of Cookie Banners? 2022. URL: https://www.youtube.com/watch?v=V0pzXU6FbQA.