Andi: Wie funktionierten Sessions in PHP

Hallo,

ich hab mal ne blöde frage:
Ist das einfach in ein bestehendes Passwortskript ein PHP-Session (bin nicht sicher wie das genau heißt) einzubauen oder ist so eine Erweiterung schwierig oder nur für Profis.

Wie funktioniert das mit den Sessions überhaupt?
Ich weiß, das finde ich alles mit Google, aber ich kapiere das meistens nicht was die alles mit 1000 Worten umschreiben.

Unsere bisherige Lösung ist alles andere als zufriedenstellend. Es ist ein Kommentarformular in mehrere Seiten eingebunden. Alle dürfen diese Seiten ansehen, doch nur Benutzer mit Passwort dürfen einen Kommentar abgeben. Wenn das richtige Passwort eingegeben wird, wird anstatt des Passwort-Form's das Kommentareingabe-Form eingeblendet (mit PHP).

Da aber auf mehreren Seiten kommentare abgegeben werden sollen, und die Benutzer nicht gezwungen werden sollen, auf jeder Seite Ihr Passwort neu einzugeben, wir das Passwort und der Benutzername immer in der URL mitgegeben. Also kann jeder der zuschaut das Passwort und den Benutzernamen in der URL sehen. Das sieht blöd aus ist unsicher...
Wäre da nicht so ne PHP-Session sinnvoll?

Würde mich über eure Antworten freuen.

mfg Andi

Hier noch der Quelltext, für alle die er interessiert oder die nicht verstanden haben was ich sagen wollte ;-)

require("login_inc.php");
if($mitgliederlogin)
{
?>
<form method="post" name="add" style="width: 600px; margin-left:auto; margin-right:auto; margin-top: 20px; margin-bottom: 0px; text-align:left;">
<input type="text" name="name" size="15" maxlength="40" VALUE=" Name" onFocus="if (value == ' Name') {value=''}">
<input type="text" name="comment_text" size="58" maxlength="5000" VALUE=" Kommentar" onFocus="if (value == ' Kommentar') {value=''}">
<input type="submit" value=" OK ">
</form>
<?PHP
exit;
}
?>
<?PHP
if(!isset($login)){
?>

<form  name="form1"  method="get"   action="<?php echo $comment_id; ?>" style="width: 600px; margin-left:auto; margin-right:auto; margin-top: 20px; margin-bottom: 0px; text-align:left;">
<input name="gid"    type="hidden"  value="<?php echo $gid; ?>">
<input name="bid"    type="hidden"  value="<?php echo $bid; ?>">
<input name="userid" type="text"    value="userid">
<input name="pass"   type="text"    value="pass">
<input name="login"  type="hidden"  value="1">
<input name="s"      type="submit"  value="login"><br><br>
Du bist noch
<a href="register.htm">nicht registriert</a>
oder hast dein
<a href="vergessen.php">Passwort vergessen?</a>
Kein Problem!
</form>

<?PHP
}
else
{
if($login=="1")
{
$pass = trim($pass);
$userid = trim($userid);
$userid = strtolower($userid);
if (empty ($userid)) {
    die ("<b><font face="Arial, Helvetica, sans-serif" size="2" color=red>Geben Sie bitte Ihre Emailadresse ein.");}
if (empty ($pass)) {
    die ("<b><font face="Arial, Helvetica, sans-serif" size="2" color=red>Geben Sie bitte Ihr Passwort ein.");
 }

$daten = file($user);
while (list ($line_num, $line) = each ($daten))
{
$ziffern = explode("&&","$line");
switch($ziffern[0])
 {
 case $userid:
  $password = $ziffern[1];
  $useremail = $ziffern[0];
  $username = $ziffern[2];
  break;
 }
}
$password = trim($password);
$useremail = trim($useremail);
 if($userid != $useremail)
 {echo "<p class="fettlogin">$userid wurde in der Datenbank nicht gefunden.</p>";
 ?>

<form  name="form1"  method="get"   action="<?php echo $comment_id; ?>" style="width: 600px; margin-left:auto; margin-right:auto; margin-top: 20px; margin-bottom: 0px; text-align:left;">
<input name="gid"    type="hidden"  value="<?php echo $gid; ?>">
<input name="bid"    type="hidden"  value="<?php echo $bid; ?>">
<input name="userid" type="text"    value="userid">
<input name="pass"   type="text"    value="pass">
<input name="login"  type="hidden"  value="1">
<input name="s"      type="submit"  value="login"><br>
<a href="register.htm">Neu registrieren!</a>
<a href="vergessen.php">Passwort vergessen?</a>
</form>

<?PHP
 }
 require("login_inc.php");
 if($useremail==$userid and $password!=$pass)
 {echo "<p class="fettlogin">Falsches Passwort!!<br> Achten Sie bitte auf korrekte Groß- und Kleinschreibung.</p>";
 ?>

<form  name="form1"  method="get"   action="<?php echo $comment_id; ?>" style="width: 600px; margin-left:auto; margin-right:auto; margin-top: 20px; margin-bottom: 0px; text-align:left;">
<input name="gid"    type="hidden"  value="<?php echo $gid; ?>">
<input name="bid"    type="hidden"  value="<?php echo $bid; ?>">
<input name="userid" type="text"    value="userid">
<input name="pass"   type="text"    value="pass">
<input name="login"  type="hidden"  value="1">
<input name="s"      type="submit"  value="login"><br>
<a href="register.htm">Neu registrieren!</a>
<a href="vergessen.php">Passwort vergessen?</a>
</form>

<?PHP
}
if($password == $pass and $userid == $useremail)
{
?>
<form method="post" name="add" style="width: 600px; margin-left:auto; margin-right:auto; margin-top: 20px; margin-bottom: 0px; text-align:left;">
<input type="text" name="name" size="15" maxlength="40" VALUE=" Name" onFocus="if (value == ' Name') {value=''}">
<input type="text" name="comment_text" size="58" maxlength="5000" VALUE=" Kommentar" onFocus="if (value == ' Kommentar') {value=''}">
<input type="submit" value=" OK ">
</form>
<?PHP
}
}
}

  1. Hallo,

    also die Sessions in kurzform:

    session_start(), // auf jeder Seite (Startet/reaktiviert die Session)

    Dann sollte man auf der Login Seite eine usernamen vergeben ($_SESSION['user_name'])

    if($_SESSION['user_name'] == "") location("Starseite"); // überprüfung ob der User eingeloggt ist, wenn nicht dann zurück mit ihm auf die Startseite

    logout:

    session_unset();
    session_destroy();

    Ich hoffe ich habe mich verständlich ausgedrückt

    samy,

  2. Hallo,

    Ist das einfach in ein bestehendes Passwortskript ein PHP-Session (bin nicht sicher wie das genau heißt) einzubauen oder ist so eine Erweiterung schwierig oder nur für Profis.

    Es kommt darauf an...
    Z.B. wie schnell Du etwas neues lernst, wie viele Seiten Du hast u.s.w.

    Im Ernst: Sessions sind keine soo grosse Sache.

    Da aber auf mehreren Seiten kommentare abgegeben werden sollen, und die Benutzer nicht gezwungen werden sollen, auf jeder Seite Ihr Passwort neu einzugeben, [...]
    Wäre da nicht so ne PHP-Session sinnvoll?

    Ja.
    Normalerweise wird dann nur noch die Session-ID in einem Cookie gespeichert.
    Wenn der Benutzer keine Cookies akzeptiert, wird die Session-ID
    als URL-Parameter (bzw. Hidden-Field) weitergegeben (Fallback).

    Alles weitere, d.h. Benutzername, Status (eingelogt ja/nein), u.s.w.
    ist dann nur noch auf dem Server in Verbindung mit der Session-ID gespeichert.

    Vielleicht helfen Dir die dclp-FAQ-Seiten zum Thema weiter:
    http://www.dclp-faq.de/ch/ch-version4_session.html
    Einfuehrung ins Konzept:
    http://www.dclp-faq.de/q/q-sessions-zweck.html

    Das Kapitel zu Sessions im PHP-Manual:
    http://www.php.net/manual/de/ref.session.php (deutsch)
    http://www.php.net/manual/en/ref.session.php (englisch)

    Wenn Du irgendwo noch Seiten antriffst, die nicht $_SESSION,
    sondern $HTTP_SESSION_VARS verwenden, oder die session_register(),
    session_unregister() oder session_is_registered() verwenden,
    heisst das, dass diese Seiten veraltet sind.
    Halte Dich an die neuen Beispiele mit $_SESSION.
    Die sind (zukunfts)sicherer.

    Gruesse,

    Thomas

    P.S. Da die Frage im Subject lautet, wie Sessions "funktionierten",
    solltest Du schon angeben, welche der veralteten PHP-Versionen
    Du denn meinst. ;-)

    1. Hallihallo,

      danke an alle für die ganzen guten Infos.

      Das ganze funktioniert jetzt schon super. Das war ja total einfach.
      Jetzt meine nächste Frage: Ist das session_destroy wirklich nötig?

      Verfällt die Session nicht sowiso nach einer bestimmten Zeit?
      Der nächte User bekommt doch nach dem Zufallsprinzip sowiso ne neue Session-ID zugewiesen und dass die mit dem des vorher erfolgreich eingeloggten user übereinstimmt ist doch relativ unwarscheinlich.

      Geht das denn einfach, dass sich der User über nen Link oder ein Formular ausloggt?
      Wie wäre denn da der Code? Ich bin irgendwie zu dooof um selbst draufzukomnmen. Ich überleg schon ne ganze Weile.

      Danke nochmal und schonmal

      Andi

      1. Hello,

        Geht das denn einfach, dass sich der User über nen Link oder ein Formular ausloggt?
        Wie wäre denn da der Code? Ich bin irgendwie zu dooof um selbst draufzukomnmen. Ich überleg schon ne ganze Weile.

        Du musst nur den "Session-Cookie" zerstören. Lies mal "Cookies setzen". Die Sessiondatei ist wahrhaftig nicht sooo wichtig.

        Grüße

        Tom

  3. Hallo Andi!

    Erstmal: Deinen Kot hab ich mir nicht angeschaut, irgendwo online stellen hätte es auch getan, so viel Code im Forum lesen ist eher mühsam ...

    Ist das einfach in ein bestehendes Passwortskript ein PHP-Session (bin nicht sicher wie das genau heißt) einzubauen oder ist so eine Erweiterung schwierig oder nur für Profis.

    Es ist grundsätzlich nicht schwer.
    Aber generell finde ich, daß nur Leute PHP (oder auch sonstige)-seiten machen sollten, die ein wenig davon verstehen.
    "Profi" muß man ja nicht gleich sein, aber man sollte schon in der Lage sein ein Tutorial zu lesen ... und zu verstehen (vor allem zu einer Fragestellung, die an fast jeder Ecke im Netz schon unzählige Male geklärt wurde).

    Wie funktioniert das mit den Sessions überhaupt?

    Lesetip: http://de2.php.net/session
    (Erklärt das "wie funktoniert" zwar wohl nicht so wirklich ganz genau, aber zumindest, wie man es benutzt, und das willst du imho ja auch wissen)

    Ich weiß, das finde ich alles mit Google, aber ich kapiere das meistens nicht was die alles mit 1000 Worten umschreiben.

    s.o.
    Wenn man schon unbedingt PHP-Scripte schreiben will, sollte man sich auch mit der Materie beschäftigen.
    (und 1000 Worte sind nicht unbedingt soo viel, auch wenn du das wohl kaum wörtlich gemeint hast ;)

    Würde mich über eure Antworten freuen.

    Viel Spaß beim freuen, und noch mehr Spaß beim Lesen der Tutorials ;)

    MfG
    Götz

    --
    Losung und Lehrtext für Dienstag, 2. Dezember 2003
    Der Herr lasse sein Angesicht leuchten über dir und sei dir gnädig. (4.Mose 6,25)
    Nun schauen wir alle mit aufgedecktem Angesicht die Herrlichkeit des Herrn wie in einem Spiegel, und wir werden verklärt in sein Bild von einer Herrlichkeit zur andern von dem Herrn, der der Geist ist. (2.Korinther 3,18)
    (http://www.losungen.de/heute.php3)