PHP - Cookies oder Seesions

Ich wollte ein “sicheres” login machen…

Das passwort wird verschlüsselt und mit der DB verglichen.

Ich wollte jetzt aber, wenn ich mich erfolgreich eingelogg habe, den Status “eingeloggt” weiter auf anderen Seiten benutzen.

Ich habe es schon mit beiden Sachen versucht, aber mann MUSS ja die Sessions und Cookies im HEADER teil bearbeiten und das ist mein Problem, da ich die Abfragen weiter unten mache und dort kann ich die cookies dann nicht ändern oder doch?

Ich habe schon (fast) ganz google durchforstet und wollte jetzt euch fragen;
1.) Was sicherer ist (Cookies <–> Sessions)?
2.) Wie man diese überall bearbeiten/abfragen/umbennen/… kann?
3.)Ob ihr ir ein Beispiel geben könntet.

MFG Sebastian

  1. Sessions sind sicherer, da sie auf dem Server abgespeichert werden und somit (bei richtiger konfiguration) schwerer zu bekommen sind.
    2.+3. Session ausgeben:

[...] echo "$_SESSION['Name']"; [...]

Session setzten:

Session löschen (löscht alle Sessions der Verbindung):

Wenn man Sessions verwendet sollte man auf allen seiten als erste bzw. zweite zeile das hier eingeben:

grüße,
sebastian

ich habe das mal getestet:
in der 1. Zeile stand:

<?php session_start(); ?>

[…]

weiterer code

aber da kam ein Fehler…

wenn du uns sagst, was für ein fehler da kommt könnten wir dir evtl. helfen.
so können wir nur raten…

grüße,
sebastian

vor dem <?php darf gar nichts stehen, sogar ein leerschritt kann zum fehler führen…

vielen dank.

Es geht.

Danke nochmal…

Autsch.
Was du bzgl. Sessions und Cookies sagst ist genau richtig! Aber bei dem Code kreuselt es sich bei mir. Wenn du mit echo etwas ausgeben willst, was nur in einer Variable steht, brauchst du keine Anführungszeichen, nur wenn du direkt Text ausgeben willst ist das nötig.
Also

reicht vollkommen, schliesslich steht in der Variable vermutlich schon ein String :wink:

Nicht nur das, wenn du deine Datein in UTF-8 speicherst, musst du sogar aufpassen, das du kein BOM (eine kleine Information vor der Datei) mitspeicherst, auch das kann zum Fehler führen.
Der Fehler entsteht, da PHP zum Erstellen der Session ein temporäres Cookie anlegen muss. Diese Informationen stehen im HTTP-Header, der vom Server vor der eigentlichen Datei an den Browser schickt. Wenn du nun aber vorher schon Teile der Datei überträgst, beendest du damit bereits den HTTP-Header - und so hat der Server keien Chance mehr, sein Cookie zu senden…

Abhilfe schafft die Funktion de3.php.net/manual/de/function.ob-end-flush.php aufrufen :wink:

Und jetzt für uns verständlich? :stuck_out_tongue_winking_eye: Ich hab nur gesagt, was ich schon mal falsch gemacht habe und vermutlich der Fehler ist.

Einen großartigen Sicherheitsunterschied zwischen Cookies und Sessions gibt es nicht, da die PHP-Sessions ebenfalls (in den meisten Fällen) Cookies benutzen :slight_smile:
Der Unterschied ist lediglich wo die Daten der Globalen $_SESSION gespeichert werden. Man könnte auch auf die PHP-Internen Sessions verzichten, und sein eigenes kleines Sessionscript basteln, welches die Daten per MySQL abfragt.
Das bietet dann den Vorteil, dass man die Sessiondaten unmittelbar mit dem Benutzerprofil verknüpfen kann.

Das benutzen von ob_start etc. ist eine der unschöneren Methoden (imho). Man sollte schon dazu in der Lage sein, PHP und HTML vernünftig voneinander zu trennen, dass solche Konflikte gar nicht erst entstehen.

@Mgier:
es gibt einige Texteditoren, die setzen ein sogenanntes BOM (Byte Order Mark, bestehend aus drei Zeichen) an den Anfang der Datei, wenn man den Editor auf UTF-8 gestellt hat. Diese Markierung dient unter anderem dazu, damit andere Editoren sofort erkennen, dass es sich dabei um ein UTF-8 kodiertes Dokument handelt, sorgt aber bei PHP für Probleme, da es somit eine Ausgabe vor dem “<?php” tag gibt.

mfg Balmung

Achso. Danke.

@fw_lighting
Gute erklaerung hab mich auch schon gefragt wiso man kein zeichen vor dem php tag setzen darf
Ansonsten
Seesions sind sicherer aber haben den Nachteil das sie zu ende sind wenn der Browser geschlossen wird!

http://php.net/session_set_cookie_params

sind ja nach wie vor in den meisten Fällen cookies, und diese haben eine “lifetime”.