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

  • #16
    Ich bin mir schon bewusst, dass es ein "Gebastel" ist, aber ich komme einfach nicht auf das gewünschte Resultat.
    Nun habe ich alle Einträge der session.gc_maxlifetime (auch cookies) gelöscht und im .htaccess den folgenden Eintrag gemacht:

    Deny from all
    php_value session.gc_maxlifetime 86000

    Wenn ich nun mit phpinfo() nachschaue ist der Wert aber immer noch auf 1440
    Habe es auch mit "86000" versucht - gleiches Resultat.

    Könnte/sollte ich nun auch noch
    php_value session.save_path "/temp"
    angeben?

    Kann es noch etwas mit den Rechten der Datei (0777) zu tun haben?

    Kommentar


    • #17
      phpinfo() zeigt dir die Informationen aus der php.ini Datei, wenn ich es richtig im Kopf habe.
      Setz doch mal in deiner korrekten php.ini die beiden Parameter auf die Werte wie du sie haben möchtest und starte danach den Webserver neu:


      session.gc_maxlifetime
      session.cookie_lifetime

      Kommentar


      • #18
        Zitat von Zeichen32 Beitrag anzeigen
        session.gc_maxlifetime
        session.cookie_lifetime
        Ich habe auf diese Felder bei php.ini keinen Zugriff beim Provider.

        Muss ich im .htaccess die
        session.gc_maxlifetime 68000
        wirklich ohne php_value eingeben?

        Kommentar


        • #19
          Zitat von nebbiolo Beitrag anzeigen

          Ich habe auf diese Felder bei php.ini keinen Zugriff beim Provider.

          Muss ich im .htaccess die
          session.gc_maxlifetime 68000
          wirklich ohne php_value eingeben?
          In der htaccess muss man die mit php_value angegeben. Der Provider kann allerdings steuern welche Felder er erlaubt zu überschreiben. Vll. solltest du daher mal bei deinem Provider nachfragen.

          Kommentar


          • #20
            Session_Start nimmt auch Optionen entgegen, steht auch im Handbuch, Beispiel #3

            Also
            PHP-Code:
            session_start([
                
            'cookie_lifetime' => 86400,
            ]); 
            in Sekunden - hier demnach ein Tag.

            Kommentar


            • #21
              nebbiolo : Was ist der Grund warum du eine Session ohne Benutzereingaben auf einen oder mehrere Tage verlängern möchtest ? Etwas permanent im Browser anzeigen ? Womöglich gibt es andere Lösungen.

              Kommentar


              • #22
                @jspt ich habe ein "einfaches" login, damit nur meine Kollegen gewisse Scripts aufrufen können. Aber es ist mühsam wenn man sich alle 20 Minuten wieder einloggen muss.
                protestix das gefällt mir sehr ... habe das .htaccess wieder gelöscht und das in meine session.php eingebaut - ABER warum 'cookie_lifetime' - ist das gleich wie ini_set('session.gc_maxlifetime',86400)?
                ... nun bin ich eine Stunde eingeloggt ... hat session nicht verloren ... glaube/hoffe es funktioniert.
                Zeichen32 hatte schon Kontakt mit dem Provider ... der hat mir ein php.php mit:
                PHP-Code:
                <?php
                ini_set
                ('session.gc_maxlifetime',86400);
                phpinfo();
                in das Verzeichnis gestellt ... und wenn ich das aufrufe steht wirklich:
                session.gc_maxlifetime 86400
                aber später (warum. durch was?) geht das wieder verloren ...

                Kommentar


                • #23
                  Ich versuche mal ein wenig Licht in die Angelegenheit zu bringen.

                  Sessions werden auf dem Server gespeichert und da werden sie durch den Garbage Collector (Müllabfuhr für Datenrückstände innerhalb von PHP) entsorgt.
                  Die Identifikationsnummer zu diesen Daten werden per Cookie an den Client(meist ein Browser oder so) gesendet.
                  Der Cookie bekommt den Schlüssel PHPSESSID mit einem Wert. Kann man sich im Browser unter Einstellungen Cookies ansehen. Der Wert ist die ID.
                  Da nun Server und Browser nichts von einander wissen, es werden ja nur ab und zu Pakete hin und her gesendet, kann folgendes Eintreten.

                  Der Browser wird geschlossen oder geht mit dem PC in die ewigen Jagdgründe.
                  Der Server oder die Domain wird aufgegeben.
                  Benutzer verstirbt.

                  Wenn eines dieser möglichen Ereignisse eintritt, verbleibt meist Datenmüll. Entweder auf dem Server oder im Browser.
                  Beide Seiten haben Vorkehrungen, das in dem Fall die unbenutzten Daten gelöscht werden.
                  Daher gibt es zwei Zeitangaben an denen man fummeln kann. Je nachdem welche zuerst eintritt ist dann für den Niedergang der Session-Id verantwortlich.

                  Client
                  Der wichtigere Zeit-Faktor. Ist hier die Zeit für das Cookie abgelaufen wird definitiv das Cookie gelöscht. Voreinstellung bei PHP ist, dass das Cookie gelöscht wird wenn der Browser geschlossen wird. Ist kein Cookie vorhanden verbleiben die Daten aber noch eine Weile auf dem Server bestehen.

                  Server
                  Hier werden die Daten in einer Datei verwaltet. Kennung ist die Session-id. Auf dem Server werden wenn nach Ablauf der Zeit für den GC die Session-ids zum Löschen markiert.
                  Sie werden noch nicht gelöscht. Dies ist erst nach etlichen Aufrufen der Scripte der Fall oder wenn man den GC direkt sagt er soll jetzt mal den Müll abholen, siehe https://www.php.net/manual/de/function.session-gc.php oder wenn eine gewisse Anzahl Aufrufe stattgefunden hat, siehe https://www.php.net/manual/de/sessio...ion.gc-divisor

                  Im Grunde und wenn man eine Session haben will die niemals abläuft, sollte man Cookies verwenden und die Daten dazu in der DB abspeichern.

                  Sessions sind halt ein einfacher und bequemer Weg, da man wenig Schreibarbeit hat und einem das Seesionhandling komplett abgenommen wird. DB Abfragen, dazu noch zeitlich gesteuert, sind da wesentlich aufwändiger.

                  Kommentar


                  • #24
                    Vielen Dank protestix für die ausführlichen Informationen - nun weiss ich was GC (für mich bis anhin Geocaching - neu Müllabfuhr ist. Sonst war mir die Logik schon bekannt ... Client/Server habe ich mir nun auch besser eingeprägt.

                    Aber wenn Sessions so einfach und bequem sind, warum funktionieren bei mir das ändern der Dauer nicht? Auch mit der "neuen" Variate gehen sie unregelmässig verloren.

                    Ich habe nun mal das vom Provider erstellte php.php genommen das besteht aus:
                    PHP-Code:
                    <?php
                    ini_set
                    ('session.gc_maxlifetime',86400);
                    session_cache_expire(720);
                    phpinfo();
                    ohne "?>" warum auch immer. Aber danach steht im phpinfo wirklich
                    session.gc_maxlifetime 86400
                    Nun habe ich ein phpinfo.php erstellt das besteht nur aus:
                    PHP-Code:
                    <?php
                    phpinfo
                    ();
                    Wenn ich diese zwei Scripts unmittelbar nacheinander starte ist beim phpinfo.php bereits wieder 1440 drin???

                    Warum das? und kann man den Wert von "session.gc_maxlifetime" einfacher lesen als durch das ganze phpinfo?

                    Kommentar


                    • #25
                      Zitat von nebbiolo Beitrag anzeigen
                      ohne "?>" warum auch immer.
                      das ?> ist optional, wenn man das weglässt verhindert man damit dass Leerzeichen/Zeilenumbrüche nach dem ?> ausgegeben werden - deswegen sollte man das ?> am Dateiende weglassen (das braucht m an nur noch wenn man den PHP-Bereich explizit schließen will um z.B. HTML direkt auszugeben.

                      Wenn ich diese zwei Scripts unmittelbar nacheinander starte ist beim phpinfo.php bereits wieder 1440 drin???
                      Logisch, ini_set setzt die Einstellung nur für das Script, das andere Script verwendet dann wieder die Einstellung aus der php.ini (oder der Apache-Konfiguration sofern gesetzt).

                      und kann man den Wert von "session.gc_maxlifetime" einfacher lesen als durch das ganze phpinfo?
                      Naja, wenn du mit ini_set() Einstellungen setzen kannst, ist ini_get() zum Lesen von Einstellungen wohl naheliegend …

                      Kommentar


                      • #26
                        Zitat von nebbiolo Beitrag anzeigen
                        Wenn ich diese zwei Scripts unmittelbar nacheinander starte ist beim phpinfo.php bereits wieder 1440 drin???
                        Das was du mit ini_set machst ist nicht persistent. Diese Einstellung ist nur für den Request gültig. Was du machen musst, um die gültigkeit der Sessions zu verlängern kommt auf die Konfiguration des Systems an.
                        Vielleicht fragst du einfach mal bei dem Hoster nach. So unüblich ist die Thematik nicht.

                        Ansonsten:
                        -pfad und lifetime der sessions per .htaccess ändern (so ist sichergestellt, dass alle request mit den gleichen einstellungen ausgeführt werden) Und der Pfad muss natürlich existieren und beschreibbar sein! /temp/ wird auf dem System gar nicht existieren, wenn wäre das /tmp. Das ist als Speicherort für Sessions aber ungeeignet, weil dort u.U. jeder lesen und schreiben kann. Schau dir also an wo deine Scripte liegen und nimmt dort ein Pfad. Es sollte dabei sichergestellt sein, dass die Dateien nicht per Web aufrufbar sind (ggf. mittels htaccess schützen).
                        -custom session handler -> da gibts unzählige fertige lösung die du mit composer einbinden kannst.
                        -führt aller 5 minuten ein ajax request aus oder refresh die seite aller 5 minuten

                        Kommentar


                        • #27
                          tk1234 und erc - Nun ist mir klar warum das "Setzten" nicht funktioniert hat - das Fremdwort "persistent" habe ich überlesen ... weil ich es nicht gekannt habe
                          Ich war der Meinung wenn ich etwas setzte dass es dann so bestehen bleibt bis zum Ablauf ... das war ein grosser Irrtum.

                          Der Provider hat mir nun die gewünschten Werte im php.ini eingetragen und es funktioniert!

                          Vielen Dank an alle für die Lektion ... und gute Zeit - bleibt alle gesund!
                          Nebbiolo

                          Kommentar


                          • #28
                            Zitat von nebbiolo Beitrag anzeigen
                            Ich war der Meinung wenn ich etwas setzte dass es dann so bestehen bleibt bis zum Ablauf
                            Tut es auch, bis das PHP-Script abläuft und somit der PHP-Prozess beendet wird. Jeder HTTP-Request startet einen neuen PHP-Prozess, der die Einstellungen aus der php.ini lädt.

                            Kommentar


                            • #29
                              Guten Morgen
                              Langsam bin ich am verzweifeln ...
                              Nun habe ich alles was die Verlängerung der Session betrifft aus den Scripts entfernt ... und geglaubt durch das herauf setzten der Werte im php.ini durch den Provider wären die Probleme gelöst.
                              Wenn ich das phpinfo starte zeigt es auch die gewünschten Werte an - und es gibt auch kein .htacces.
                              Nun muss ich aber feststellen, dass die Session immer noch früher als vor 18 Stunden verfällt ... wahrscheinlich nach den ominösen 24 Minuten.
                              Ich rufe in jedem Script am Anfang mein session.php mit folgendem Inhalt auf:
                              PHP-Code:
                              session_start();
                              if (
                              $_SESSION['phi_uid'] >0)
                                 {
                                 
                              $uid   $_SESSION['phi_uid'];
                                 
                              $uname $_SESSION['phi_uname'];
                                 }
                                else
                                 {
                                 
                              $uid=null;
                                 
                              $uname=$prog="";
                                 } 
                              Wo liegt nun mein erneuter Denkfehler?

                              Kommentar


                              • #30
                                Hier noch der Ausschnitt aus dem Script was nach der session.php kommt ... die Weiterleitung zum login.

                                PHP-Code:
                                if(!isset($_SESSION['phi_uname']))
                                   {
                                   
                                $parameter "Location: ".$domain."login.php";
                                   
                                header($parameter);
                                   exit;
                                   } 

                                Kommentar

                                Lädt...
                                X