Redirect Frage

Guten Morgen ,

ich habe folgende PHP Datein erstellt :

[PHP]

Wilkommen auf der Homepage des Freundeskreises Strinz-Margarethä und Aube

Zum Aufrufen der Website ist eine Authenifizierung erforderlich


Benutzername

Passwort

[/PHP]

[PHP]<?php include('access.php'); $user = $_POST['usr']; $pass = $_POST['psw']; if ($user == $username && $pass == $password) { header("Location: ../index.php"); } ?>[/PHP]

[PHP]

<?php $username = "user"; $password = "pass"; ?>

[/PHP]

Die geschütze Datei ist die Index-Datei, auf welche nach erfolgreicher Authentifizierung weitergeleitet wird.

Nun folgendes Problem :

Sobald man die Index Datei aufruft, wird weitergeleitet auf das Authentifizierungsformular .

index.php :
[PHP]

<?php include('fix/de_head.html'); ?>
<?php include('fix/de_header.html'); ?> <?php include('html/de_nav_aktuell.html'); ?> <?php include('html/de_cont_aktuelles.html'); ?> <?php include('html/de_infobox.html'); ?> <?php include('html/de_nav_right.html'); ?>
[/PHP]

Sobald man sich authentifiziert hat wird man nun wieder auf die index geleitet. Mien Problem ist nun das sich das ganze wiederholt, da in der index.php

[HTML]
[/HTML]

steht. Wie kann ich diese Wiederholung umgehen? Ich bin ein Totaler Anfänger in PHP. Das dieser PW Schutz nicht sicher ist, ist mir bekannt. Das soll nur eine kleine Übung sein.

Mfg halifax123

Die Wiederholung umgehst Du, indem Du die Abfrage nach dem Passwort direkt in die index-Datei einbaust.
Du guckst, ob der übergebene User/Passwort stimmen, wenn nein, leitest Du auf das Formular um.
Wenn kein user/passwort angegeben werden, stimmen sie ja nicht, also leitest Du weiter (mit header()).

Dann ist das auch sicher. Das Passwort kann ja keiner lesen und wenn Du die Inhalte der index nur anzeigst, wenn user/passwort stimmen, dann passts doch. Die meta-Weiterleitung ist das, was es unsicher macht.

Wenn Du dann mehr als nur eine Seite hast und nicht willst, dass man sich auf jeder Seite einloggen muss, musst Du die Zugangsdaten irgendwo speichern. Dafür bieten sich Sessions an.

Ok klingt plausibel, nur wie mache ich das :slight_smile: Ich will ja das er erst das Formular anzeigt und dann , wenn passwort un username stimmen die Index anzeigt…

mfg halifax

Dafür würde ich dann mit Session arbeiten. Dann könnte es in etwa so aussehen
[php]

<?php session_start(); if(empty($_SESSION['username'] || $_SESSION['username'] == "") { include_once("loginform.php"); } else { include_once("mainSite.php"); } ?>

[/php]

Im ersten Schritt, wenn er nur testen will, braucht er noch keine Sessions.

Du bindest einfach VOR dem Doctype der index ein Script ein (ob Du das direkt da rein schreibst oder includest, ist egal), das das übergebene Passwort prüft. if (richtig) dann folgt der Doctype und Inhalt der Seite. if (!richtig) wird das Formular eingebunden oder auf eine Formularseite verlinkt.

so, also die Version von Efchen hat geklappt. Danke nochmal :wink: . Ich würde das nun gerne mal mit einer Session versuchen. Die Session habe ich gestartet mit

[PHP]
session_start();
$_SESSION[‚Foo‘] = ‚Bar‘;
echo $_SESSION[‚Username‘];
[/PHP]

Wie funktioniert das nun mit beispielsweise der Linkvergabe. Die SID wird ja im Link mitangezeigt.
Ich habe mir das bereits unter http://http://tut.php-q.net/de/sessions.html angeschaut, blicke da aber noch nicht ganz durch. Verwende ich die Variable $_SESSION um die SID anzuhängen? Geh ich richtig davon aus, dass mit dem Starten der Session eine zufällige Zahlenkombination erstellt wird?

mfg halifax

Mal ein ganz grobes Session Beispiel

login.php:
[php]
session_start();

if($_SESSION[‚username‘] == „Gilles“) {
header(„Location: intern.php“);
} else {
if($_GET[‚action‘] == „login“) {
$_SESSION[‚username‘] = „Gilles“;
}
echo „login“;
}

[/php]

intern.php
[php]
session_start();

if(empty($_SESSION[‚username‘]) || $_SESSION[‚username‘] == „“) {
// zurück zum Login
header(„Location: login.php“);
} else {
// Abfrage ob ausloggen
if($_GET[‚action‘] == „logout“) {
session_destroy();
header(„Location: login.php“);
}
echo „Du bist intern“;
}

[/PHP]

Wenn du die Login Seite so aufrufst passsiert nichts.
Wenn du die interne Seite aufrufst ohne dass der Username Gilles ist wirst du zurück aufs login geführt.

Wenn du die Login Seite aufrufst mit login.php?action=login wirst du eingeloggt. Rufst du die Login Seite nun nochmal auf wirst du auf die interne Seite weiter geleitet
Wenn du „eingeloggt“ bist wird dir die interne Seite angezeigt und du wirst nicht weiter geleitet.

Wenn du nun auf der internen Seite intern.php?action=logout aufrufst wird deine Session zerstört und du bist somit ausgeloggt.

Jede Session hat ihre eigene ID. Du kannst dir ja mal den Inhalt von Session mit var_dump($_SESSION) ausgeben lassen :slight_smile: