Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP 7.2 Session existiert auch wenn der Browser geschlossen ist

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

  • #31
    Zitat von Crashbreaker Beitrag anzeigen
    Wie kann ich den Lebensdauer der Sessions nur solange aufrecht halten lassen bis der Browser geschlossen wird?
    Was verstehst du unter "Lebensdauer des Session"? Und hast du es mit einem anderen Browser getestet?

    Kommentar


    • #32
      Zitat von LudwigBr Beitrag anzeigen
      Wie kommst du auf die Idee, dass der Nutzer nach einmal Browserschließen dein Bild wieder angezeigt bekommen will? Das scheint mir eine willkürlich festgelegter Zeitraum zu sein.
      Wenn sich das Bild ändert, dann zeig es ihm nach jeder Änderung wieder an. Wenn du den Nutzer damit "nerven" möchtest und er das regelmäßig wegklicken soll, dann mach eine zeitliche Abhängigkeit drauß.
      Nein, du hast das ganze falsch verstanden aber danke dir trotzdem für die Mühe und Antwort.

      Der Nutzer will das weg Klicken eines Bildes optional halten.
      Das Bild ändert sich nicht. Der bleibt Konstant erhalten. Daher gibt es kein zeitliche Abhilfe.
      Design technisch möchte der Inhaber es so haben. Daher geht es hier nur um die Funktionalität und nicht um welchen Sinn was hat oder nicht hat.

      MfG
      Daniel

      Kommentar


      • #33
        Zitat von erc Beitrag anzeigen
        Was verstehst du unter "Lebensdauer des Session"? Und hast du es mit einem anderen Browser getestet?
        Auch dir danke ich für die Antwort.

        Ich meine damit einfach, sobald ein Nutzer das Fenster / den Browser geschlossen hat, sollen die Session einfach nicht mehr existieren.
        Ja habe es auch mit anderen gängigen und auch auf Mobilen Browsern getestet.

        MfG
        Daniel

        Kommentar


        • #34
          Wenn du dir selbst (ohne Session) ein Cookie mit PHP schreibst? Und teste mal in anderen Bowsern.

          int $expire = 0
          ...
          Hat der Parameter den Wert 0 oder ist er nicht gesetzt, verfällt das Cookie am Ende der Session (wenn der Browser geschlossen wird).
          http://php.net/manual/de/function.setcookie.php
          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


          • #35
            Zitat von Crashbreaker Beitrag anzeigen
            Ich meine damit einfach, sobald ein Nutzer das Fenster / den Browser geschlossen hat, sollen die Session einfach nicht mehr existieren.
            Ja, das konnt ich herauslesen. Es gibt aber zwei Seiten. Die Clientseite, wo die Session in Form eines Cookies existiert und die Serverseite, wo die eigentlichen Daten der Session in irgendeiner Form existieren. Auf beiden Seiten gibt es eine "Lebensdauer" die aber voneinander unabhängig ist. Schleißt du den Browser wird das Session Cookie gelöscht, damit ist die Session auf der Clientseite beendet. Serverseitig existiert die Session aber weiter, die wird beendet/gelöscht wenn "letzter Zugriff" + max_session_lifetime überschritten ist.

            Auf welcher Seite liegt dein Problem? Ist es das Session Cookie oder das Session File?

            Zitat von Crashbreaker Beitrag anzeigen
            Ja habe es auch mit anderen gängigen und auch auf Mobilen Browsern getestet.
            Wenn es das Session Cookie ist. Nimm den Chrome oder Firefox. Ruf deine Seite auf. Developer Toolbar. Cookie/Storage aufrufen. Die Session Id merken, das Cookie löschen, URL neu aufrufen. Der Request sollte defintiv ohne Session ID stattfinden, ansonsten hast du was flasch gemacht. In der Response ist eine neue Session Id als Cookie. Ist das eine neue oder die alte? Wenn es eine neue ist, was ist da als Lifetime definiert (sollte 0 sein)? Wenn du die alte Session Id zurück bekommst läuft was total falsch.

            Kommentar


            • #36
              Zitat von Crashbreaker Beitrag anzeigen
              Ich habe ein Bild der auf jeder Seite und Unterseiten existiert.
              Der Anwender möchte aber bei bedarf dieses Bild nicht mehr angezeigt bekommen. Dafür ist auf dem Bild, Bspw. oben rechts ein X- sowie ein PLUS-Button platziert.
              Klickt der Anwender auf den X-Button verschwindet das Bild und nur der Plus-Button erscheint um die Entscheidung wieder revidieren zu können.
              Der Anwender möchte das Bild aber auf den Folgeseiten (und auch auf Unterseiten etc.) weiterhin ebenfalls nicht mehr angezeigt sehen.
              Dafür hatte ich dann die Hilfe und Lösung über Session-Variablen erhofft.
              Du brauchst herzu gar keine Sessions, aber ein Cookie und Javascript. Mit Javascript setzt du das Cookie auf Bild anzeigen oder Bild nicht anzeigen, abhängig davon was der Benutzer wählt.
              Da das Cookie über Seitenaufrufe hinweg gespeichert bleibt, ist das der Lösungsweg. Natürlich kannst du auch über Javascript dem Cookie ein Ablaufdatum mitgeben, oder 0 damit es bei Browserschliessung gelöscht wird.

              Serverseitig fragst du erst das Cookie ab und setzt dann die CSS Klasse im img Element..
              Das Ein- und Ausblenden machst zum Beispiel mit einer klasse die display hidden beinhaltet. Die Klasse zum Anzeigen hat dann display: inline.
              Du wechselt also nur die CSS Klasse zu dem Bild, abhängig vom Wert im Cookie.

              Hat jemand, Cookies dauerhaft auf ablehnen eingestellt, bekommt er das Bild eben ständig, das ist aber normal.
              Wenn, du diesen Fall auch abdecken willst, sowie wenn jemand Javascript abgeschaltet hat, gibt es noch den Weg über ein Formular und GET. Die Anzeige regelst du dann über den Parameter, das machen viele Seiten auch so.


              Kommentar


              • #37
                Hallo,

                ich danke dir erc und protestix für den Lösungsansatz.
                Klingt verständlich und plausible ... Jedoch nach meiner Versuchung an der obigen Beispiel hat fehlgeschlagen.
                Habe es nicht hinbekommen.

                Könntet ihr mir anhand der obigen Beispiel helfen?
                Ich habe dort den Wert statt in ein Session-Variable in ein Cookie-Variable anhand der setcookie() Methode abgespeichert. Später diese dann mit $_COOKIE abgefragt.

                Die Session-ID ändert sich permanent, mal ist die 1 (true) da mal statt die 1 wird der Session-ID als Wert abgespeichert.

                Wenn ihr mir ein Beispiel zeigen könntet, wäre ich euch sehr dankbar.

                MfG
                Daniel

                Kommentar


                • #38
                  Hier mein bisheriger versuch:

                  PHP-Code:
                  <?php

                  ini_set
                  ('session.use_strict_mode'1);
                  ini_set('session.use_cookies'1);
                  ini_set('session.cookie_lifetime'0);
                  //session_start();

                  if ( isset($_GET['activeImage']) && $_GET['activeImage'] == 'true' ) {
                  //     $_SESSION['activeImage'] = TRUE;
                      
                  setcookie(session_name(), TRUEtime()+1'/');
                  }
                  if ( isset(
                  $_GET['activeImage']) && $_GET['activeImage'] == 'false' ) {

                  //     $_SESSION = [];
                      
                  if (isset($_COOKIE[\session_name()]) || \ini_get('session.use_cookies')) {
                          
                  $params = \session_get_cookie_params();
                          @\
                  setcookie(
                              
                  session_name(),
                              
                  '',
                              \
                  time() - 42000,
                              
                  $params['path'],
                              
                  $params['domain'],
                              
                  $params['secure'],
                              
                  $params['httponly']
                              );
                      }
                  //     if (\session_status() == PHP_SESSION_ACTIVE) {
                  //         @\session_destroy();
                  //     }
                  //     @\session_unset();
                  //     unset($_SESSION);
                  }

                  $cookie 'kein Cookie übertragen';
                  if (isset(
                  $_COOKIE['PHPSESSID'])) {
                      
                  $cookie implode(" "$_COOKIE);
                  }

                  ?>

                  <!DOCTYPE html>
                  <html lang="de">
                  <head>
                  <meta charset="UTF-8">
                  <title>ISessionid and cookies</title>
                  </head>

                  <body>
                      <h3>Im Server</h3>
                      <p>
                          $_Cookie vom Browser: <?= $cookie?><br>
                          session_id: <?= session_id(); ?><br>
                      </p>

                      <?php if(isset($_COOKIE['activeImage']) && $_COOKIE['activeImage'] == TRUE): ?>

                      <img alt="test" src="test.jpg">

                      <?php endif; ?>

                      <h3>Cookies im Browser</h3>
                      <p id="showcookies"></p>
                      <p><a href="?">Startseite</a></p>
                      <p><a href="?activeImage=true">Image aktive</a></p>
                      <p><a href="?activeImage=false">Image deaktive</a></p>

                      <script>
                          var x = document.cookie || 'LEER';
                          var val = document.getElementById("showcookies");
                          val.textContent = x;
                          console.log(document.cookie);
                      </script>

                  </body>
                  </html>
                  Vielleicht findet ihr den Fehler.

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

                  MfG
                  Daniel

                  Kommentar


                  • #39
                    Warum verwendest du immer noch die Session dafür?

                    Und das Cookie "activeImage" setzt du nirgendwo.

                    Miste doch erst mal alles aus, bevor du neues dazu gibst. Da ist so viel unnötiger Quatsch in dem Code.

                    Kommentar


                    • #40
                      Meine Idee: nutze 'sessionStorage' von JavaScript. Das wird beim Schliessen des Browser jeweils gelöscht

                      Edit: wenn du auf den Inhalt vom sessionStorage im PHP zugreifen willst, müsstst du mit Ajax noch einen XMLHttpRequest machen.

                      Kommentar


                      • #41
                        Zitat von MrChangelog Beitrag anzeigen
                        Meine Idee: nutze 'sessionStorage' von JavaScript. Das wird beim Schliessen des Browser jeweils gelöscht
                        Wozu? Cookies ohne Zeitangaben werden auch gelöscht beimSchliessen und das er keine Session braucht, hatten wir schon vorab geklärt.

                        Da es wohl immer noch nicht klar ist hier mal ein Beispiel nur mit einem Cookie
                        PHP-Code:
                        <?php
                        if ( isset($_COOKIE['show_img']) && $_COOKIE['show_img'] == 'false' ) {
                            
                        $display 'none';
                            
                        $button_text 'Bild anzeigen';
                        }else{
                            
                        setcookie('show_img'"true"0);
                            
                        $display 'inline';
                            
                        $button_text 'Bild verbergen';
                        }

                        ?>


                        <!DOCTYPE html>
                        <html lang="de">

                        <head>
                        <meta charset="UTF-8">
                        <title>Cookie example to toggle the visibility of an image</title>
                        <style>
                            p:after { content: " "; clear: both; display: block; }
                            body {max-width: 430px; border: 1px silver solid; padding: 5px;}
                            img#img_info { display: <?= $display?>; margin: 5px; float: left;}

                        </style>    
                        </head>

                        <body>
                            <p>Drücke [F5] zum aktualisieren. Bildstatus bleibt erhalten. Beim Schliessen des Browers wird das Cookie gelöscht. Das Bild erscheint wieder, unabhängig vom vorherigen Zustand.</p>
                            <button id="btn_toggle" value="whatever"><?= $button_text?></button>
                            <p>Lorem ipsum dolor sit amet consectetuer tincidunt et iaculis Nunc non.</p>
                            <p>Ut leo tincidunt consequat elit Quisque volutpat at mauris congue turpis.</p>
                            <p><img id="img_info" src="https://picsum.photos/200/300" width="200" height="300" alt="photo">
                                Ac pellentesque nunc Curabitur et habitasse consequat sed pellentesque wisi ante.
                            </p>


                        <script>
                            function getCookie(name) {
                                var name = name + "=";
                                var array = document.cookie.split(';');
                                var max = array.length
                                for(var i = 0; i < max; i++) {
                                    var c = array[i];
                                    while (c.charAt(0) == ' ') {
                                        c = c.substring(1);
                                    }
                                    if (c.indexOf(name) == 0) {
                                        return c.substring(name.length, c.length);
                                    }
                                }
                                return "";
                            }
                            var btn = document.getElementById("btn_toggle");
                            var img = document.getElementById("img_info");
                            btn.addEventListener('click', function () {
                                if (getCookie("show_img") == "false") {
                                    document.cookie = "show_img=true; expires=0;";
                                    img.style.display = "inline";
                                    btn.textContent = "Bild verbergen";
                                }else{
                                    document.cookie = "show_img=false; expires=0;";
                                    img.style.display = "none";
                                    btn.textContent = "Bild anzeigen";
                                }
                            }, false);

                        </script>

                        </body>
                        </html>
                        Kurze Erklärung zum Script

                        Im PHP Teil wird lediglich geschaut ob ein Cookie existiert, wenn dies nicht der Fall ist, dann wird ein Cookie angelegt.
                        Weiter werden 2 Variablen definiert und mit Werten versehen, die im weiteren Verlauf gebraucht werden

                        Im HTML Teil ist nur Text, ein Bild und ein Schalter(Button).

                        Der Button wechselt die Beschriftung, daher die Variable von PHP. Das value vom Button interessiert hier nicht aber die id ist wichtig.
                        Das Bild erhält die Höhe und Breite, damit es im Browser nicht springt und mit CSS wird der Anzeigestatus festgelegt.
                        Ausgangswerte für den Schalter und das Bild kommen über Variable am Anfang von PHP.

                        Die Umschaltung(toggle) erfolgt mit Javascript. Dazu wird das Cookie show_img über die Funktion getcookie ausgelesen.
                        Abhängig vom Zustand(Wert) des Cookies wird dann der Zustand des Bildes, die Schrift im Button und der Wert des Cookies neu gesetzt.
                        Mit dem Button schaltet man den Zustand um, von Bild anzeigen oder nicht anzeigen.

                        Das Cookie stirbt am Ende der Browsersitzung.

                        Getestet am mit Safari, FF, und Chrome.

                        EDIT:
                        Es müssen alle Browserfenster geschlossen werden, es reicht nicht das Browserfenster zu schlieesen, welches man gerade anschaut, wenn noch ein weiteres Browserfenster im Hintergrund offen ist, dies könnte sonst zu Irritationen und falschen Annahmen führen.

                        Kommentar


                        • #42
                          Zitat von protestix Beitrag anzeigen
                          [...] und das er keine Session braucht, hatten wir schon vorab geklärt.
                          Die 'session' im JavaScript hat er so oder so; die hat mit der Session im PHP auch nix zu tun.

                          Kommentar


                          • #43
                            Es gibt keine Session in Javascript(client). Session ist serversache. Lies noch mal das Handbuch bitte.

                            Kommentar


                            • #44
                              Zitat von protestix Beitrag anzeigen
                              Es gibt keine Session in Javascript(client).
                              Eben.

                              Kommentar


                              • #45
                                Hallo Leute,

                                wow ich danke für euch allen die sich Mühe gemacht haben und mir stehts hier versucht haben mit ihren Antworten zu helfen und bitte höflichst um Verzeihung meiner Verzögerung.

                                Ich werde mir das letztere genauer anscheuen und mein Versuch erneut starten. Jedoch ist mir momentan beruflich was dazwischen gekommen und daher muss mein Versuch hier leider etwas warten.

                                Ich hoffe um Verständnis für meine Verzögerung.

                                MfG
                                Daniel

                                PS:
                                Ich werde sobald wie möglich zurück kommen und an dem Punkt weiter arbeiten.

                                Kommentar

                                Lädt...
                                X