So das hat mir Onkel_Otto geschrieben:
Hallo,
Ich will mir mal die Mühe machen und versuchen, ein möglichst verständliches Session Tut in Verbindung mit einem ersten kleinen Projekt (Loginsys.) zu schreibseln. Grund dafür ist nicht zuletzt meine Langeweile aber vielmehr das, dass ich selber zu meiner Zeit mit keinem ( icon_neutral.gif ) Session Tut zurecht gekommen bin. Also, viel Spaß beim lesen. icon_wink.gif
Was bedeutet Session?
"Session" ist das englische Wort für Sitzung. Warum man es nun so genannt hat, kann ich auch nur teilweise nachvollziehen, das ist aber auch nicht weiter wichtig. Soviel schonmal vorweg: Unsere "Sitzung" muss "gestartet" und auch wieder "beendet" werden. Soweit schonmal verstanden? Gut.
Wozu dienen Sessions bzw. was soll ich damit anfangen?
Sessions kann man sich wie eine große Box, gefüllt mit Variablen, die einen Wert haben können oder auch nicht, vorstellen. Also einfache Variablen die vor sich hin existieren. (Genau genommen ist diese Box ein großer Array, wie man auch am Syntax erkennt.)Vorteil des ganzen ist, sie sind ab dem Zeitpunkt an dem sie gestartet wurden, so lange in Scripten verwendbar sind, bis das Explorer Fenster geschlossen wird oder ein manueller (manchmal auch automatischer, jeh nach Wunsch) Abbruch erfolgt.
Diese Eigenschaft kann man z.B. bei einem Login nutzen. Warum wieso weshalb? - garnicht so schwer wie das folgende Beispiel zeigt:
Folgender Stand der Dinge: Wir haben in einer MySQL Datenbank Loginname mit zugehörigen Passwort gespeichert. Das sollen unsere Zugangsdaten werden.
Das eigentliche Gerüst des Scriptes lässt sich nun erahnen. Es wird ein Formular dargestellt, in dem man Benutzername und Kennwort eingeben muss. Nach dem Klick auf "Abschicken" wird einfach überprüft, ob die eingegebenen Werte, mit denen aus der MySQL Datenbank übereinstimmen. Ist dies der Fall, wird einfach auf eine nächste Seite weitergeleitet. Sollte die Werte falsch sein, wird eine Fehlermeldung ausgegeben und die Umleitung verhindert.
Sind die Werte korrekt, kommt unsere Sitzung ins Spiel. Aber auch wirklich nur dann, wenn die Werte korrekt sind. Angenommen dies ist der Fall, so wird die eine Session Variable erstellt. Wir nennen sie der Einfachheit halber mal "webhilfe".
Wie bereits gesagt, existiert diese Variable jetzt solange im "Hintergrund" bis das Fenster geschlossen wird.
rolleyes.gif : Okay, und was haben wir nun davon?
Tja das ist der Trick des ganzen. Angenommen wir haben ein Loginscript ohne Sessions. Dieses wurde in eine Website verbaut. Will man in den Admin Bereich, klickt man auf einen Link und landet beim Loginformular. Sind die eingegebenen Werte korrekt wird man umgeleitet und ist soweit glücklich.
Aber hier verbirgt sich eine Sicherheitslücke. icon_wink.gif
Wenn man die URL zum "eigentlich passwortgeschützten Bereich" kennt, kann man sie einfach manuell aufrufen und landet auch dort. Man hat also das Loginscript übersprungen. Dies wollen wir mit unseren Sessions verhindern.
Status: Die eingegebenen Werte in unserem Formular waren übereinstimmend mit denen aus der Datenbank. Die Session mit dem Wert "webhilfe" wurde erfolgreich erstellt. Umgeleitet sind wir auch schon.
An und für sich sind wir jetzt aber auf dem selben Stand wie bei dem Script ohne Session. Dies wird aber nicht so bleiben. Wir werden uns die Existenz der "webhilfe" Variable zu Nutzen machen.
Wir erstellen eine Datei, in der überprüft wird, ob die Session Variable "webhilfe" mit selbigen Wert existiert. Dies geht mit der php Funktion isset()
Bzw. eigentlich überprüfen wir, ob die Variable NICHT existiert und leiten in diesem Fall automatisch um auf error.php oder eine andere Datei nach Wahl.
Diese kleine Überprüfungsdatei includieren wir in jede passwortgeschützte Datei. Somit wird sichergestellt, dass das Loginformular nicht durch manuelle Eingabe der URL umgangen wurde.
Der praktische Session Teil
Eine Session wird mit session_start() gestartet.
Um eine Session Variable wir z.B. unsere "webhilfe" Variable zu erstellen tippen wir
PHP:
<?php
$_SESSION['webhilfe'] = "webhilfe";
?>
ähnlich wie beim Umgang mit Arrays.
So einfach geht das icon_wink.gif
Die Login.php
PHP:
<?php
session_start(); //Session wird gestartet
// Anfang Foginform
$form = '
<form name="login" method="post" action="login.php"><div align="center">
<table width="200" border="0">
<tr><td width="56">Username</td>
<td width="128"><input type="text" name="lgname"></td>
</tr><tr><td>Passwort</td>
<td><input type="password" name="lgpass"></td></tr></table>
<p align="center"><input type="submit" name="Submit" value="Login"></p>
</div>
';
// Anfang Script
// Schauen ob jemand eingelogged ist und ob die IP stimmt, wenn - dann umleiten
if(isset($_SESSION['loginname']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']){
$switchurl = "admin/index.php";
header("Location: $switchurl");
exit;
}
// Wenn niemand eingelogged ist, nach dem Submit
elseif(isset($_POST['Submit']) && isset($_POST['lgname']) && isset($_POST['lgpass'])){
// Vergleich
$sql = "SELECT * FROM user WHERE username='".strtolower($_POST['lgname'])."' AND passwort='".md5($_POST['lgpass'])."' LIMIT 1";
$result = mysql_query($sql) or die("Fehler im query: ".mysql_error());
if(mysql_num_rows($result)){
$_SESSION['webhilfe'] = "webhilfe";}
// Umleitung zum Admin-Index
$switchurl = "admin/index.php";
header("Location: $switchurl");
exit;
}
// Else Fehlermeldung
else {
echo $form;
echo "<p align='center'>Ihre Angaben waren Fehlerhaft, bitte versuchen sie es erneut.</p>";
}
?>
Die pruef.php
PHP:
<?php
// prüfen ob nicht vorhanden
if(!isset($_SESSION['webhilfe']))
{
//ggf. Umleiten
$switch = "login.php";
header("Location: $switch");
}
?>
Ich hoffe ich habe keine Klammern vergessen. Kann schonmal vorkommen. Ich hoffe ich konnte weiterhelfen. icon_wink.gif
Gruß, Onkel_Otto
darauf aufbauend meine frage an alle mitglieder: wollt ihr in zukunft mehr von tutorials dieser art? dann schreibt es. nur wenn ihr es schreibt, wird es realisiert!
Schreibt uns eure Meinung. Es ist uns sehr wichtig.