Ankündigung

Einklappen
Keine Ankündigung bisher.

Session verlängern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session verlängern

    Hallo

    Ich bin am verzweifeln - schon unendliche Zeit versuche ich die "session" zu verlängern.

    Im login.php steht folgendes:
    PHP-Code:
     session_start();
      
    $_SESSION['phi_uid'] = $result['phi_user_id'];
      
    $_SESSION['phi_uname'] = $result['phi_user_name']; 
    in verschiedenen scripts habe ich den Befehl:
    ini_set("session.gc_maxlifetime",86400);
    eingebaut und getestet ... phpinfo() zeigt dann auch die 86400 an und wird dem entsprechend nicht zerstört/verändert.

    Auch im .htaccess gibt es kein Eintrag zur Session ... (dort hatte ich es auch versucht).
    Zugriff auf die php.ini habe ich beim Provider nicht auf alle Felder ... darunter auch dieses.

    Nun mein Problem: Nach einer gewissen Zeit ist der "$_SESSION['phi_uname']" leer, obwohl sie Session nicht abgelaufen ist (wäre ja nach einem Tag).
    Irgend etwas löscht die Session, ich habe alle Scripts genau kontrolliert und nichts gefunden.
    An was könnte das liegen?

    Viele Grüsse, Nebbiolo

  • #2
    Am Session Cookie denke ich. Diesen musst du auch ein Lifetime mitgeben, weil sonst der Browser diese löscht.

    Kommentar


    • #3
      ach ist das kompliziert ... nun muss ich auch noch die Cookie kennen lernen und einbauen
      ok, werde mal dahinter gehen - danke für den Tipp!!!!!

      Kommentar


      • #4
        Siehe session_set_cookie_params. Beachte:
        session.cookie_lifetime integer session.cookie_lifetime definiert die Cookie-Lebensdauer, die an den Browser geschickt wird, in Sekunden. Der Wert 0 bedeutet "bis der Browser geschlossen wird." Grundeinstellung 0.

        Kommentar


        • #5
          So, ich habe nun noch ein bisschen rum getestet ...
          Danke auch Dir jspit für den Anstoss, aber an dem liegt es nicht, denn auch wenn der Browser offen bleibt gehen die Angaben verloren.
          Ich habe nun ein Test-script gemacht, das rufe ich alle 10 Minuten auf und kann den Inhalt der session und cookies sehen.
          Im login.ptp habe ich nun auf Rat von protestix folgendes eingebaut:
          PHP-Code:
          setcookie("username",$user,time()+(3600*24));
          setcookie("datzeit",$date,time()+(3600*24)); 
          Und bin ganz erstaunt wie gut das funktioniert - die cookies bleiben bestehen ... die Session geht nach einer gewissen Zeit verloren (komischerweise nicht nach 24 Minuten).

          Jetzt überlege ich mir ernsthaft die session raus zu schmeissen und dafür die cookie zu verwenden - die löscht es mir nicht.
          Spricht etwas dagegen? Die Webseiten haben keinen kommerziellen Aspekt ... also sollte die Sicherheit (was ich gegoogelt habe) nicht so wichtig sein ...

          Kommentar


          • #6
            Die Webseiten haben keinen kommerziellen Aspekt ... also sollte die Sicherheit (was ich gegoogelt habe) nicht so wichtig sein ...
            Die meisten Rechner in Bot-Netzen und Virenschleudern sind die, welche keine kommerziellen Aspekte verfolgen und genau so denken.

            Dann vergleiche doch mal in deinem Browser Dev.-Console (F12 drücken) diese beiden Cookies um zu schauen was der Unterschied ist.

            Kommentar


            • #7
              Evtl. spuckt dir der GC in die Suppe und löscht dir die Session-Dateien unter dem Hintern weg, siehe session.gc_*-Einstellungen vielleicht musst du auch session.save_path auf ein anderes Verzeichnis umbiegen damit andere Scripte nicht die Session-Dateien darin löschen.

              Kommentar


              • #8
                Zitat von tk1234 Beitrag anzeigen
                Evtl. spuckt dir der GC in die Suppe und löscht dir die Session-Dateien unter dem Hintern weg, siehe session.gc_*-Einstellungen vielleicht musst du auch session.save_path auf ein anderes Verzeichnis umbiegen damit andere Scripte nicht die Session-Dateien darin löschen.
                wohin kann ich Pfad legen? darf der in der Domain liegen oder oberhalb?
                Bein angegebenen Link steht: zum Beispiel auf '5;/tmp' ... das verstehe ich nicht

                Hast Du mir vielleicht ein Muster?

                Kommentar


                • #9
                  Zitat von nebbiolo Beitrag anzeigen
                  wohin kann ich Pfad legen? darf der in der Domain liegen oder oberhalb?
                  Bein angegebenen Link steht: zum Beispiel auf '5;/tmp' ... das verstehe ich nicht
                  Der Pfad muss außerhalb der Domain liegen (darf also nicht per http erreichbar sein), wie das Verzeichnis genau heißt ist egal. Was die 5 bedeutet steht im Handbuch (Link siehe #7), die Zahl brauchst du aber wohl kaum.

                  Kommentar


                  • #10
                    Danke tk1234!

                    ich habe nun folgendes im login.php:
                    PHP-Code:
                            ini_set('session.save_path','./temp');
                            
                    ini_set('session.gc_maxlifetime',86400);
                            
                    session_cache_expire(720);
                            
                    $_SESSION['phi_uid'] = $uid;
                            
                    $_SESSION['phi_uname'] = $user
                    wenn ich das \temp anschaue ist aber nach dem login nichts drin (:- muss jedoch noch abwarten ob die session wieder leer wird ...

                    Kommentar


                    • #11
                      Zitat von nebbiolo Beitrag anzeigen
                      wenn ich das \temp anschaue ist aber nach dem login nichts drin
                      Du verweist auch nicht auf /temp sondern auf ./temp - und da hat das Session-Verzeichnis eben nichts zu suchen da es so per http erreichbar ist (ich gehe mal davon aus dass die login.php per http erreichbar ist). Und wo steht eigentlich session_start()?

                      Kommentar


                      • #12
                        session_start() habe ich am Anfang vor diesen Befehlen ... und neu auch vor den cookies.
                        mit ./temp wollte ich eine Ebene nach ober (also ausserhalb httpdocs) habe es auf \temp geändert ... aber ist immer noch nichts im Verzeichnis.

                        Kommentar


                        • #13
                          Zitat von nebbiolo Beitrag anzeigen
                          session_start() habe ich am Anfang vor diesen Befehlen ... und neu auch vor den cookies.
                          Falsch. Du musst schon erst die Einstellungen setzen und dann die Session starten - das steht aber auch im Handbuch!

                          Dein Versuch mit den Cookies aus #5 ist übrigens falsch: der eingeloggte User kann/darf nicht in einem Cookie gespeichert werden, dort könnte der User nämlich einen beliebigen anderen User reinschreiben und er wäre dann als dieser eingeloggt …

                          mit ./temp wollte ich eine Ebene nach ober (also ausserhalb httpdocs) habe es auf \temp geändert ... aber ist immer noch nichts im Verzeichnis.
                          Du solltest nicht wild rumprobieren sondern genau überlegen was du machst. Auf /temp (Schrägstrich, kein Backslash!) hast du unter Linux idR keinen Zugriff, das darf nur root. Mit ./ bist du im aktuellen Verzeichnis, mit ./temp damit im Verzeichnis temp unterhalb des aktuellen Verzeichnisses - um eine Ebene weiter nach oben zu kommen brauchst du ../ (zwei Punkte), evtl. wäre es aber sinnvoller den kompletten (absoluten) Pfad anzugeben.

                          Kommentar


                          • #14
                            es will einfach nicht ...

                            An Anfang jeder Seite (erste Zeile) füge ich include ("session.php"); ein, das folgenden Inhlat hat:

                            PHP-Code:
                            session_start();
                            if (
                            $_SESSION['phi_uid'] >0)
                               {
                               
                            $uid   $_SESSION['phi_uid'];
                               
                            $uname $_SESSION['phi_uname'];
                               
                            $prog  $_SESSION['prog'];
                               }
                              else
                               {
                               
                            $uid=null;
                               
                            $uname=$prog="";
                               } 
                            Das habe ich auch im login.php auf der ersten Zeile (wenn ich es wegnehme bleibt die Session leer nach einloggen) .. und nun habe ich nach setzen der Parameter nochmals session_start() eingefügt - (Du musst schon erst die Einstellungen setzen und dann die Session starten)

                            PHP-Code:
                                if  ($user_email == $result['phi_user_email'] AND $pwmd5 == $result['phi_user_password'])
                                    {
                                    
                            $uid=$result['phi_user_id'];
                                    
                            $user=$result['phi_user_name'];
                                    
                            $date=date("Y-m-d H:i:s");
                                    
                            setcookie("username",$user,time()+(3600*24));
                                    
                            setcookie("program",$prog,time()+(3600*24));
                                    
                            setcookie("datzeit",$date,time()+(3600*24));
                                    
                            ini_set('session.save_path','/temp');
                                    
                            ini_set('session.gc_maxlifetime',86400);
                                    
                            session_cache_expire(720);
                                    
                            session_start();
                                    
                            $_SESSION['phi_uid'] = $uid;
                                    
                            $_SESSION['phi_uname'] = $user;
                                    
                            header("location: ".$domain.$prog);
                                    exit();
                                    } 
                            Macht es überhaupt Sinn die ini.set bei jedem einloggen zu setzen - oder gibt es eine Möglichkeit das "einmalig" zu machen?

                            Kommentar


                            • #15
                              Zitat von nebbiolo Beitrag anzeigen
                              und nun habe ich nach setzen der Parameter nochmals session_start() eingefügt - (Du musst schon erst die Einstellungen setzen und dann die Session starten)
                              einfach noch ein session_start() dahinter ist natürlich genauso Unsinn. Erst Einstellungen setzen, dann Session starten, was ist daran so schwer zu verstehen? Und vergiss das setcookie(), das ist Blödsinn.

                              Macht es überhaupt Sinn die ini.set bei jedem einloggen zu setzen - oder gibt es eine Möglichkeit das "einmalig" zu machen?
                              Du musst die Einstellungen vor *jedem* session_start setzen, das muss aber nicht per ini_set geschehen sondern kann auch per php.ini oder per Apache-Konfiguration (.htaccess/httpd.conf) gemacht werden.

                              Kommentar

                              Lädt...
                              X