Include vs. Header(Location: ...)?



  • Hi!

    Was ist suchmaschinenfreundlicher,übersichtlicher und einfacher: Das Nutzen von Include oder von Header(Location: ...) um eine neue Seite aufzurufen?
    Wegen ein paar Kleinigkeiten sieht das momentan so bei mir aus:
    index.php?section=bla -> include "bla.php" (gilt für alle, außer login.php und admin.php)
    index.php?section=login -> wenn erfolgreich -> header(Location: index.php?section=admin), wenn nicht header(Location: index.php?section=login)
    index.php?section=admin -> wenn nicht eingeloggt header(Location: index.php=section=login) sonst zeige admin.php

    Zu beachte ist, dass die index.php alle Dateien (sofern vorhanden) stupide per include einbindet, d.h. auch die login.php und die admin.php. Erst diese führen ein entsprechendes Skript aus und verhalten sich dann so wie oben.


  • Mod

    Wichtig ist, dass eine URI exakt einen Content anbietet. Und ein Content nur über eine URI zu erreichen ist.

    Wenn du also
    index.php?section=login
    hast, dann solltest du nach dem erfolgreichen Login weiterleiten auf
    index.php?section=foo

    Das hat 2 Gründe.

    1. du wirst hart bestraft von Suchmaschinen wenn sie merken dass mehrere Links auf den selben Inhalt verweisen. Stichwort: Duplicate Content

    2. der User wird es dir danken wenn er die URL seinem Freund weitergeben kann oder direkt Bookmarken kann. index.php?section=login kann man nicht gut bookmarken oder weitergeben, da man wenn man nicht eingelogt ist ja auf einem login formular landet anstatt den content in foo einfach als gast zu betrachten.



  • Punkt 1 verstehe ich, aber sehe hier nicht direkt ein Problem. Punkt 2 ist hier weniger der Fall. Vielleicht wird es einfacher, wenn ich erkläre wofür login.php und admin.php da ist:
    login.php zeigt ein Login-Formular an, wenn man es abschickt sendet es die Daten an sich selber und überprüft diese. Wenn der Login erfolgreich war, wird die admin.php per header(Location: index.php?section=admin) aufgerufen.
    admin.php überprüft ob ein erfolgreicher Login stattgefunden hat (Konkret ob die ID im Cookie gleich mit der in der SQL Tabelle ist). Wenn es einen erfolgreichen Login gab, dann wird die admin.php angezeigt. Sie enthält ausschließlich administrative Inhalte(die soll z.b. ein Gast gar nicht sehen dürfen), also z.B. eine neue News verfassen.
    Wenn der Login nicht erfolgreich war, wird per header(Location: index.php?section=login) die login.php aufgerufen.


  • Mod

    Pille456 schrieb:

    (Konkret ob die ID im Cookie gleich mit der in der SQL Tabelle ist)

    Ich hoffe damit meinst du einen unique hash und keine id in der Datenbank. Denn cookies sind nicht sicher - jeder kann cookies manipulieren wie er lustig ist.

    Wenn der Login nicht erfolgreich war, wird per header(Location: index.php?section=login) die login.php aufgerufen.

    Dann ist es ja korrekt und du hast kein duplicate content.
    Ich dachte deine Frage war nun ob admin.php bei nicht korrektem login die login.php per include einbinden soll oder per header an index.php?section=login weiterleiten soll.

    Wenn deine Frage aber war ob die einzelnen sektionen eigene PHP Dateien sein sollen, also index.php?section=foo -> foo.php, dann ist dein aktueller ansatz der korrekte. Denn so hast du in index.php eine zentrale stelle um änderungen vornehmen zu können.



  • Shade Of Mine schrieb:

    Pille456 schrieb:

    (Konkret ob die ID im Cookie gleich mit der in der SQL Tabelle ist)

    Ich hoffe damit meinst du einen unique hash und keine id in der Datenbank. Denn cookies sind nicht sicher - jeder kann cookies manipulieren wie er lustig ist.

    In den Cookie schreibe ich eine 10-stellige ID bestehens aus zufalls generierten Buchstaben+Zahlen+Sonderzeichen (quasi einmal die komplette ASCII Tabelle abgegrast). Selbiges kommt auch in eine SQL Tabelle. Nur wenn beide Werte übereinstimmen, ist der Login gültig.

    Shade Of Mine schrieb:

    Wenn deine Frage aber war ob die einzelnen sektionen eigene PHP Dateien sein sollen, also index.php?section=foo -> foo.php, dann ist dein aktueller ansatz der korrekte. Denn so hast du in index.php eine zentrale stelle um änderungen vornehmen zu können.

    Darauf zielte meine Frage ab: Ist der allgemeine Aufbau der Seite (mit login.php, admin.php und den einzelnen Sektionen als neue Seiten) korrekt.



  • Äh verstehe ich das richtig, man sollte lieber statische URL's wie "/das-ist-mein-text-id_10.html" verwenden, anstatt dynamische wie "/inhalt.php?id=10"?
    Nee, oder?



  • "Wichtig ist, dass eine URI exakt einen Content anbietet. Und ein Content nur über eine URI zu erreichen ist."
    In dem Fall ist es mehr oder weniger egal, wie du es machst, solange es eindeutig bleibt. Also z.b. "/meinText01.html" und "/meinText02.html" verweisen auf zwei unterschiedliche Dateien (bzw. unterschiedlichen Inhalt). Das Gleiche geht auch mit "/index.php?text=01" und "/index.php?text=02", denn jeder Inhalt auf der Website hat seinen eigenen Pfad und ist damit eindeutig nur über diesen einen zu erreichen.
    Ein Problem mit der Methode "/index.php?text=XX" ist nur, dass es oft auch eine entsprechende Datei "textXX.php" oder so gibt, die dann wiederum direkt über "/textXX.php" zu erreichen ist, insofern man das weiß.
    Den Zugriff auf diese Dateien sollte man dann unterbinden oder anders handhaben(z.b. Weiterleitung auf die "richtige" "/index.php?text=XX"), sodass wirklich alles nur zentral über die index.php abgewickelt wird.


Anmelden zum Antworten