Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP 7.2 Session existiert auch wenn der Browser geschlossen ist

Einklappen

Neue Werbung 2019

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

  • PHP 7.2 Session existiert auch wenn der Browser geschlossen ist

    Hallo Leute,

    ich brauche eure Unterstützung. Ich kämpfe seit einer Woche schon an einer eigentlich sehr simplen Problem. Ich habe im Internet alles mögliche recherchiert und nach Lösungen gesucht aber nichts hat mir geholfen. Komme überhaupt nicht weiter und weiß nicht ob mein Problem am PHP 7.2 liegt.
    Ich habe leider auch keine Möglichkeit den Script auf PHP 5.6 oder sonst der gleichen laufen zu lassen.

    Ich habe folgendes Problem:
    Ich speichere wie üblich ganz normalen einen boolischen Wert in einer Session-Variable ab. Soweit funktioniert alles wunderbar. Kann den Wert auch abfragen und damit auch weiter arbeiten. Doch ich kann leider den Session (-Inhalt) nicht bereinigen, wenn ich den Browser geschlossen habe. Der Wert mit der Session existiert weiterhin und genau das ist mein akutes Problem.

    Ich verwende das neueste Xampp (PHP Version 7.2) auf einer Windows Maschine.

    Wie kann ich den Lebensdauer der Sessions nur solange aufrecht halten lassen bis der Browser geschlossen wird?
    Manuell kann ich durch "session_destroy()" Funktion den Inhalt der Session leeren. Tue ich das nicht, lebt es weiter .

    Ich habe jegliche INI-Einstellungen versucht aber vergebens.
    Unter anderem auch diese hier:

    PHP-Code:
    ini_set('session.use_strict_mode'1);
    ini_set('session.use_cookies'1);
    ini_set('session.cookie_lifetime'0); 
    Ich wäre euch sehr dankbar, wenn ihr mir helfen könntet. Bin für jegliche Aufklärungen dankbar.
    Bitte versteht mich nicht falsch aber ich würde mich umso mehr freuen, wenn ich das Problem so schnell wie möglich lösen könnte. Denn ich stehe massive unter Zeitdruck - da ich mit der Recherche immense viel Zeit verschwendet habe .
    Respektiere dabei aber auch euren investierten Aufwand und die Zeit.

    Ich bedanke mich im Voraus für die Mühe und Verständnis.

    Mit freundlichen Grüßen
    Daniel

    PS:
    Ich hoffe ich habe sämtliche Infos mitgeliefert und nichts dabei vergessen. Falls ich etwas vergessen habe, so informiert mich bitte danach.

  • #2
    Der Webserver berechnet deine Website und liefert sie aus. Danach hat er keine Ahnung was du tust. Er kann also nicht wissen, wann das Browserfenster geschlossen wird. Eine Work-Around wäre KeepAlives zu senden - solange Pakete kommen wird die Session verlängert und sonst eben zerstört.

    Eine andere Möglichkeiten die dir evtl. helfen könnte ist der lokale sessionStorage: https://developer.mozilla.org/de/doc...sessionStorage

    Kommentar


    • #3
      Hallo Tropi,

      ich danke dir für die schnelle und sehr informative Antwort.
      Es klingt sehr logisch und sehr verständlich, jedoch bitte ich um Aufklärung zu meinem sehr alten wissen über Sessions. Vielleicht vertue ich da mich etwas.
      Man sagt ja doch, dass das Session die Sitzung so lange aufrecht erhält bis der Browser geschlossen wird oder durch Zeitangabe mit Cookies die Werte auf dem jeweiligen Client abspeichert.
      Somit ist der Satz widersprüchlich. Aber natürlich finde ich deine Aussage richtiger zu mal meine Tests dies belegt haben.

      Zur lokale sessionStorage Lösung:
      Habe damit noch nie gearbeitet. Auf der Seite sind paar Beispiele die ich gleich testen werde jedoch habe ich da 1-2 Fragen dazu und hoffe das du mich dabei unterstützt.

      1. Um sessionStorage verwenden zu können, müsste ich dafür gewisse Libraries oder sonst was einbinden oder kann ich einfach blind mit sessionStorage loslegen?

      2. Denke wenn JS im Browser deaktiviert ist, wird sessionStorage gar nicht funktionieren. Gibt es da nicht eine andere Lösung?

      Wieso wird auf der Seite von PHP durch diese Einstellung hier

      PHP-Code:
      ini_set('session.cookie_lifetime'0); 
      dann erwähnt, dass durch Browserschließung die Sitzung der Sessions beendet wird?
      Die Erläuterung ist in Verbindung mit Cookies, jedoch trifft es auch die Session selbst. (Vielleicht habe ich da auch etwas miss verstanden).
      Hier der Link dazu: http://php.net/manual/de/session.con...ookie-lifetime

      Ich bitte um Hilfe und bedanke mich im Voraus.

      MfG
      Daniel

      Kommentar


      • #4
        Die Erläuterung ist in Verbindung mit Cookies, jedoch trifft es auch die Session selbst.
        Lies dir mal die Einführung zu Sessions durch: http://php.net/manual/de/intro.session.php

        Das ist deswegen:

        Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt.
        ...
        Wenn ein Besucher Ihre Website aufruft, überprüft PHP automatisch (falls session.auto_start auf 1 gesetzt ist) oder auf Anfrage (explizit durch session_start()), ob mit der Anfrage schon eine bestimmte Session-ID gesendet wurde. Wenn dies der Fall ist, wird die zuvor gespeicherte Umgebung wiederhergestellt.
        Das Cookie ist quasi der Indikator/Schlüssel zu der Session und den Daten die im Session-Speicher am Server liegen.

        MOD: Verschoben von PHP-Fortgeschritten
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Halo hausl,

          zunächst danke für die Hilfreiche Antwort.

          Okay habe es mir durchgelesen und habe es verstanden. Jedoch wie würdest du mein Problem anders als mit JS lösen können?
          Gibt es da eine Möglichkeit?

          Mein Vorhaben ist sehr simple. Ein Wert soll default mäßig false sein. Klickt der Anwender auf einem Link, wird dieser Wert zu true (soweit alles simple). Dieser Wert bleibt jedoch so lange aktive und true, bis der Anwender die Seite verlässt.

          Mit Session habe ich mich da geirrt.
          Bitte um Hilfe.

          MfG
          Daniel

          Kommentar


          • #6
            Gehe doch bitte in Deiner php.ini alle Session einstellungen durch und schaue welche von der Standard-Vorgabe abweichen und passe diese an wenn nötig. Standadeinstellungen findest Du hier: http://php.net/manual/de/session.configuration.php

            Dann weiss man erst mal welchen Konfig-Stand du hast. Aber bitte nicht in einem PHP script anpassen sondern in der ini!

            Wenn das Problem weiterhin besteht leers Du mal alle Caches im genutzten Browser und startest diesen neu. Wenn es dann geht dann liegts halt an der Clientseite die sich da wohl dann die letzte Session-ID merkt.

            Dann solltest Du Deinen Browser evtl so konfigurieren das das halt nicht geschieht das Sitzungskekse wiederverwendet werden.
            PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

            Kommentar


            • #7
              Hallo Ulfikado,

              danke für die Antwort.
              Ist eine gute Idee, habe ich gleich durchgeführt.
              Alles ist auf Standard in der php.ini gesetzt außer, dass der "session.save_path" bei mir auf das Verzeichnis "C:\xampp\tmp" definiert ist. Standardmäßig ist diese Einstellung auf NULL.

              Habe auch sämtliche Cookies im Browser etc. entfernt und dem Browser beendet und neu gestartet.
              Leider hat mir dies nichts gebracht. Session besteht auch nach der Sitzung.

              Hast du vielleicht noch eine andere Idee?

              MfG
              Daniel

              Kommentar


              • #8
                Zitat von Crashbreaker Beitrag anzeigen
                Session besteht auch nach der Sitzung.
                Schau doch einfach nach welche Header dein Browser an deinen Webserver sendet (Devtools). Entweder er sendet ein Cookie oder die Session-ID sitzt in der URL. Anders *kann* der Webserver dich bzw. deinen Browser ja auch gar nicht identifizieren.
                [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                Kommentar


                • #9
                  Ich habe folgendes Problem:
                  Ich speichere wie üblich ganz normalen einen boolischen Wert in einer Session-Variable ab. Soweit funktioniert alles wunderbar. Kann den Wert auch abfragen und damit auch weiter arbeiten. Doch ich kann leider den Session (-Inhalt) nicht bereinigen, wenn ich den Browser geschlossen habe. Der Wert mit der Session existiert weiterhin und genau das ist mein akutes Problem.
                  Wie schon erwähnt weiß deine Session nix davon das sie eigentlich gelöscht werden kann.
                  Mit PHP wirst du auch kein verlassen der Seite oder schließen des browsers erkennen. Dafür kannst du Javascript nehmen. Ich glaube war beforeunload oder so.
                  jedenfalls wenn dein Event läuft machst du einen call zur ner php datei und sagst die session soll geschlossen werden.

                  Wäre eine idee für einen workaround

                  Wenn JS deaktiviert ist ...

                  Der Webserver berechnet deine Website und liefert sie aus. Danach hat er keine Ahnung was du tust. Er kann also nicht wissen, wann das Browserfenster geschlossen wird. Eine Work-Around wäre KeepAlives zu senden - solange Pakete kommen wird die Session verlängert und sonst eben zerstört.
                  Du könntest aber auch Leute die JS deaktiviert haben quasie ausperren. Facebook und co die von JS animationen leben machen das auch

                  Kommentar


                  • #10
                    Zitat von Cnodex Beitrag anzeigen

                    Wie schon erwähnt weiß deine Session nix davon das sie eigentlich gelöscht werden kann.
                    Mit PHP wirst du auch kein verlassen der Seite oder schließen des browsers erkennen. Dafür kannst du Javascript nehmen. Ich glaube war beforeunload oder so.
                    jedenfalls wenn dein Event läuft machst du einen call zur ner php datei und sagst die session soll geschlossen werden.

                    Wäre eine idee für einen workaround
                    Danke für die Hilfe.

                    Daran habe ich auch schon gedacht, dass ich den session_destroy() durch JS ansteuere, sobald der Browser geschlossen wird.
                    Ja die Methode "bevoreunload" ist schon richtig aber da habe ich das Problem, dass der Anwender innerhalb der Seite weiterhin Surfen möchte, diese dann nicht kann. Da bei jeder Reload der Seite die Methode greift.

                    MfG
                    Daniel

                    Kommentar


                    • #11
                      Zitat von Crashbreaker Beitrag anzeigen
                      Daran habe ich auch schon gedacht, dass ich den session_destroy() durch JS ansteuere, sobald der Browser geschlossen wird.
                      Ja die Methode "bevoreunload" ist schon richtig aber da habe ich das Problem, dass der Anwender innerhalb der Seite weiterhin Surfen möchte, diese dann nicht kann. Da bei jeder Reload der Seite die Methode greift.
                      Und wenn die Netzwekverbindung beim User weg ist, kriegst du auch nix vom Schließen des Browsers mit. Auch wenn ein Browser abstürzt, wirst du das nicht merken.

                      Kommentar


                      • #12
                        Zitat von Tropi Beitrag anzeigen
                        Der Webserver berechnet deine Website und liefert sie aus. Danach hat er keine Ahnung was du tust. Er kann also nicht wissen, wann das Browserfenster geschlossen wird. Eine Work-Around wäre KeepAlives zu senden - solange Pakete kommen wird die Session verlängert und sonst eben zerstört.

                        Eine andere Möglichkeiten die dir evtl. helfen könnte ist der lokale sessionStorage: https://developer.mozilla.org/de/doc...sessionStorage
                        Komme auf diesen Thread nochmal zurück.

                        Durch sessionStorage habe ich es zwar geschafft, aber auf Mobilen Firefox funktioniert das ganze nicht.
                        Des Weiteren habe ich das Problem, wenn der Anwender JS deaktiviert hat, dass das ganze eh nicht laufen würde.

                        Daher muss es irgendwie anders machbar sein aber wie?
                        Mir Latein ist hier am Ende ...

                        MfG
                        Daniel

                        Kommentar


                        • #13
                          Zitat von hellbringer Beitrag anzeigen

                          Und wenn die Netzwekverbindung beim User weg ist, kriegst du auch nix vom Schließen des Browsers mit. Auch wenn ein Browser abstürzt, wirst du das nicht merken.

                          Okay da hast du auch recht.
                          Wie müsste ich dann am besten vorgehen?
                          Wie würdet ihr solch ein Problem lösen?

                          MfG
                          Daniel

                          Kommentar


                          • #14
                            Zitat von Crashbreaker Beitrag anzeigen
                            Okay da hast du auch recht.
                            Wie müsste ich dann am besten vorgehen?
                            Wie würdet ihr solch ein Problem lösen?
                            Warum betrachtest du es überhaupt als Problem? Ich seh da kein Problem.

                            Kommentar


                            • #15
                              Zitat von lottikarotti Beitrag anzeigen
                              Schau doch einfach nach welche Header dein Browser an deinen Webserver sendet (Devtools). Entweder er sendet ein Cookie oder die Session-ID sitzt in der URL. Anders *kann* der Webserver dich bzw. deinen Browser ja auch gar nicht identifizieren.
                              Habe ich nachgeschaut aber nichts auffälliges finden können.
                              Vielleicht hilft es dir / den anderen hier weiter um mich da auf dem Punkt genau zu sensibilisieren.

                              Antwortkopfzeilen (363 B)
                              Cache-Control no-store, no-cache, must-revalidate
                              Connection Keep-Alive
                              Content-Length 64
                              Content-Type text/html; charset=UTF-8
                              Date Tue, 15 May 2018 09:06:56 GMT
                              Expires Thu, 19 Nov 1981 08:52:00 GMT
                              Keep-Alive timeout=5, max=100
                              Pragma no-cache
                              Server Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.2
                              X-Powered-By PHP/7.2.2
                              Anfragekopfzeilen (466 B)
                              Accept text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
                              Accept-Encoding gzip, deflate
                              Accept-Language de-DE,de;q=0.8,tr-TR;q=0.7,tr;q=0.5,en-US;q=0.3,en;q=0.2
                              Cache-Control max-age=0
                              Connection keep-alive
                              Cookie TestTorgem=jmmglgsvabajmkikjb01ue33ml21rqi8
                              DNT 1
                              Host localhost
                              Upgrade-Insecure-Requests 1
                              User-Agent Mozilla/5.0 (Windows NT 6.3; W…) Gecko/20100101 Firefox/59.0


                              MfG
                              Daniel

                              Kommentar

                              Lädt...
                              X