hmm: Session: Was ist das eigendlich genau?

Hi Leute,

ich habe mir eine kleine Webseite mit Node JS, clientseitigem JavaScript und serverseitigem Python gebaut. Die Webseite besteht aus zwei HTML Seiten, einmal der Startseite und einer Willkommensseite. Gibt man ein Passwort und eine EMail auf der Startseite ein, so bekommt man über einen Fileserver (nodeJS) die Willkommensseite angezeigt. Die Willkommensseite ist dadurch nur über die Startseite erreichbar und nicht durch einen direkten link.

Frage: Wie baue ich daraus etwas, dass ich "Session" nennen kann? Hätte ich ein Session/Login System, wenn ich folgendes tue:

  1. Nach erfolgreichem Login, speichere die Name und Passwort des Nutzers in seinen Cookies? Oder nehm ich hier einfach einen Hashwert?

  2. Ich frage jedesmal, wenn eine Seite besucht wird, ob ein passender Hashwert in den Coocies gesetzt wurde?

  3. Angenommen ich speichere den HashWert nicht in den Cookies, sondern clientseitig im JavaScript, wäre dass dann nicht sicherer? Verlässt ein Besucher meine Webseite, so muss er sich beim nächsten Besuch automatisch anmelden, wär dass nicht der einzige "Nachteil"?

  1. Hi,

    vielleicht findest du im Wiki zum Thema Zugriffsschutz sachdienliche Hinweise …

    Viele Grüße
    Robert

  2. Tach!

    1. Nach erfolgreichem Login, speichere die Name und Passwort des Nutzers in seinen Cookies? Oder nehm ich hier einfach einen Hashwert?

    Du nimmst sowas nicht, wenn sich damit der Client durch Änderung der Daten als jemand anderes authentifizieren oder autorisieren kann. Üblicherweise nimmt man einen schwer erratbaren Zufallswert als Session-ID und ordnet dieser serverseitig die Daten zu, die requestübergreifend aufbewahrt werden sollen, inklusive Identifikationsinformationen. Und am besten nimmt man sich dafür ein vorhandenes System, damit man sich um seine Anwendung kümmern kann und nicht als Nebenkriegsschauplatz (gibts dafür ein pazifistisches Synonym?) mit Dingen wie dem Aufräumen nicht mehr benötigter Session-Daten beschäftigen muss.

    1. Ich frage jedesmal, wenn eine Seite besucht wird, ob ein passender Hashwert in den Coocies gesetzt wurde?

    Ja, oder du schreibst zum Beispiel bei PHP nur session_start(), und das kümmert sich um das Session-Handling, egal ob neue Session oder wiederaufgenommene. Der Rest der Anwendung greift lesend oder schreibend auf das beliebig gestaltbare Array $_SESSION zu und erledigt ist der Fall.

    1. Angenommen ich speichere den HashWert nicht in den Cookies, sondern clientseitig im JavaScript, wäre dass dann nicht sicherer?

    Der Speicherort beim Client ist nicht entscheidend. Alles kann manipuliert werden. Es gibt lediglich ein paar kleinere Einstellmöglichkeiten, die die großen Browser dazu veranlassen, die Daten nicht ganz so einfach rauszurücken. Zum Beispiel, dass ein Cookie nicht mit Javascript auslesbar ist.

    Man nimmt Cookies dafür, weil das die einfachste Methode clientseitig ist. Man muss dazu nichts weiter tun. Der Browser kümmert sich selbständig um das Mitsenden bei allen Requests. Wenn du hingegen Daten irgendwo im Javascript ablegst, brauchst du irgendeine Routine in Javascript, die die Daten mitgibt. Das geht dann auch nur für über Javascript erzeugte Requests.

    Verlässt ein Besucher meine Webseite, so muss er sich beim nächsten Besuch automatisch anmelden, wär dass nicht der einzige "Nachteil"?

    Es kommt darauf an. Man kann bei Cookies eine Verfallszeit festlegen. Nach Ablauf dieser Zeit verwirft der Client den Cookie. Oder es ist ein Cookie ohne Zeit, dann wird es mit Schließen des Browsers verworfen.

    dedlfix.

  3. ich habe mir eine kleine Webseite mit Node JS, clientseitigem JavaScript und serverseitigem Python gebaut.

    Hauptsache modern. Und weil Du jetzt mit 2 serverseitigen Programmiersprachen hantierst wirst Du früher später schwer durcheinander kommen weil das Session-Handling unter diesem Umstand durchaus ein Problem werden kann.

    Ich würde vorschlagen, Du ziehst Dir mal die PHP-Dokumenatation über Sessions rein, dann weist Du was Sessions sind und warum es keine "per se" gute Idee ist, eine "kleine Webseite mit Node JS, clientseitigem JavaScript UND serverseitigem Python" zu bauen und dabei Sessions zu verwenden.

    1. ich hab das so gemacht:

      client -> javascript

      serverseitig -> auch javascript

      nodejs zum verbinden

      ich setze clientseitig einen hashwert in die cookies der 24h gültig ist, sofern dieser nicht per logout gelöscht wird. diesen hashwert setze ich genau dann, wenn sich ein user auf meiner seite anmeldet.

      das funktioniert vom ablauf so:

      1. user ist auf meiner hauptseite "/" und gibt sein login ein

      2. er wird auf "/login" weitergeleitet, diese seite setzt den hashwert

      3. im anschluss leitet ihn die seite "/login" weiter zu "/dashboard"

      4. jedesmal wenn er direkt auf "/dashboard" will wird gechekt ob er einen hashwert in den cookies hat, wenn keiner da ist wird er auf die hauptseite weitergeleitet

      ist das so in ordnung oder mach ich das besser anders?