Session hat zu kurze Lebensdauer

shutdown

Erfahrenes Mitglied
Hi!

So sieht der Anfang meiner PHP Datei aus:


PHP:
<?php

    session_start();
    if(!isset($_SESSION['username']))
    {
        $_SESSION['username']=$_POST['login'];
    }

    if(!isset($_SESSION['password']))
    {
        $_SESSION['password']=md5($_POST['password']);
    }


?>


Ich habe darunter ein Formular - erst zur Passwort-Abfrage, dann zum Update einer Datenbank (jeweils ein eigener Submit-Button)

für die Passwortabfrage sind die Session-Inhalte noch gespeichert, allerdings beim Update gehen sie verloren

Wie kann ich die "Lebensdauer" der Sessions erhöhen?

Danke
shutdown
 
na gut, wird dann zwar etwas mehr, aber von mir aus ;)

PHP:
session_start();
    if(!isset($_SESSION['username']))
    {
        $_SESSION['username']=$_POST['login'];
    }

    if(!isset($_SESSION['password']))
    {
        $_SESSION['password']=md5($_POST['password']);
    }


    $conn = mysql_connect("nönö", "auchnet", "schogarnet");
    if(!$conn)
    {
        echo "Verbindung zur Datenbank fehlgeschlagen.";
    }
    else
    {
        mysql_select_db("user");
    }
    $login=$_POST['login'];
    $daten = "SELECT * FROM `table` where `username`='$login'";
    $auslesen_daten = mysql_query($daten) or die("Error: " . mysql_error());
    $daten = mysql_fetch_object($auslesen_daten);

    $password = ($daten->password);

    if($password==md5($_POST['password']) or $_SESSION['password']==$password)
    {
        $logged_in=1;
        $_SESSION['logged_in']=$logged_in;

        $username = ($daten->username);
        $user = ($daten->Vorname)." ".($daten->Nachname);
        $vorname = ($daten->Vorname);
        $nachname = ($daten->Nachname);
        $strasse = ($daten->Str);
        $HsNr = ($daten->HausNR);
        $plz = ($daten->PLZ);
        $ort = ($daten->Ort);
        $telefon = ($daten->Telefon);
        $fax = ($daten->Fax);
        $handy = ($daten->Handy);
        $email = ($daten->eMail);
    }


var_dump($_SESSION);
?>

Kurz gesagt - hole mir zum User, der sich einloggt die Daten aus der Datenbank, vergleiche vorher aber die Passwörter.

Hierzu das Formular, das aktiviert wird, wenn die Session noch nicht gesetzt ist.

PHP:
<?php
    if(!isset($_SESSION['username']))
    {
        echo '

<form action="./members.php" method="post">

Formlar mit Submit name="submit"

</form>

        ';
    }

?>


Wenn dann alles geklappt hat, die Session aktiv und die Passwortabfrage korrekt ist, dann lädt er mir die Daten in Formular 2:

PHP:
<?php
    if(isset($_SESSION['username']) and $_SESSION['username']!="" and ($logged_in=="1" or $_SESSION['logged_in']=="1"))
    {
        echo '



<form action="members.php" method="post">

Formular mit Submit-Button name="submit2"

</form>
        ';
    }
    else
    {
        if($submit)
        {
            echo '<font color="yellow"><big>Die eingegebenen Daten sind nicht korrekt!<br> <a href="http://www.mrg-abi2004.de/members.php">Zurück</a></big></font>';
        }
    }

?>

Danach kommt dann das Datenbank-Update:

PHP:
<?php


    if($submit2)
    {
         $user= $_SESSION['username'];

         Hier hol ich die Daten aus dem $_POST

        $update = "UPDATE `table` SET

        Hier update ich die einzelnen Variablen


        where `username`='$user'";

        $exec_update = mysql_query($update) or die("Error: " . mysql_error());
    }

    echo $update;

?>

Und genau bei 'where `ùsername` = '$user'; da hakt es.

Denn er holt sich den $user nicht aus $_SESSION['username'] - kann er ja nicht, da die Session bei erneutem Aufrufen des Formulars (notwendig für das Update) wieder leer ist.

Also nochmal: Das Formular lädt sich 2mal selbst. Einmal zum überprüfen des Passwortes und zur Ausgabe der Datenbank-Daten( submit name="submit) und ein 2tes Mal zum Entgegennehmen des Update-Befehls (submit name="submit2).

Und bei zweiten Mal ist die Session leer
 
Ich würde es mal mit einer Fallunterscheidung versuchen. Und zwar würde ich die Sessionvariablen nur mit den Post Variablen überschreiben wenn Submit1 gedrückt wurde. Bei Submit2 würde ich den Code überspringen.

Welcher Button gedrückt wurde liegt auch in einer _POST Variable. Mit phpinfo() siehst du was ich meine.
 
gerade ausprobiert - ändert aber gar nichts

Bei meiner Version prüft er ja, ob die Session überhaupt schon gesetzt sind und wenn dann soll er sie ja gar nicht überschreiben

(also auch eine Art Fallunterscheidung)
 
Nee ich meine das so:

starte session

Wenn Submit 1:
Dann Lade Variablen in Sessionvariablen
Lade Datenbank
Gib Formular 2 aus

Wenn Submit 2:
Mach den Update

Wenn Garnix:
Gib Formular 1 aus.

Was machst du eigentlich mit der Funktion var_dump($_SESSION) ?
 
starte session

Wenn Submit 1:
Dann Lade Variablen in Sessionvariablen
Lade Datenbank
Gib Formular 2 aus

Wenn Submit 2:
Mach den Update

Wenn Garnix:
Gib Formular 1 aus

Im Grunde ist das genau das, was ich mache - ich umschreibe es nur anders ;)

Mit dem var_dump($_SESSION) schau ich mir an, was im Array $_SESSION gespeichert ist - darum sehe ich ja auch, dass nach drücken auf submit 2 der array wieder leer ist
 
laut der phpinfo() wird die Session_id über $_POST['PHPSESSID'] übergeben

habe jetzt das an den Anfang angefügt:

session_id($_POST['PHPSESSID']);
session_start();

Dann führt er mir das Skript aber gar nicht mehr korrekt aus - bringt was davon, dass der Server nicht erreichbar wäre - wenn ichs weglasse funktionierts wieder (so halbwegs wie vorher).

Is da ein Fehler drin?
 
Zitat aus einem Tutorial:

Um die Session-ID an eine andere Seite zu übergeben, benutzt PHP4 in der Standardeinstellung Session-Cookies, welche nicht gespeichert werden und mit dem Schließen des Browsers verfallen. In diesen Cookies wird der Name der Session (z.B. PHPSESSID) und die zugehörige Session-ID abgelegt. Bei einem Request auf ein Folgescript wird der Cookieinhalt mitgeschickt, und PHP weiß damit in welcher Sessiondatei die benötigten Daten gespeichert sind.



Dies passiert automatisch, ohne dass zusätzlicher Code geschrieben werden muss.

Und genau das ist es ja, was passiert.

Er übergibt mir die Daten, an die Session, wenn das Formular sich zum ersten Mal wieder aufruft.
Allerdings beim zweiten Mal ist die Session aber wieder leer.

Kann ich das ändern?
 
Zurück