Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Schon wieder! IE 7 verliert Session Variable

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Schon wieder! IE 7 verliert Session Variable

    Hallo Leute!

    Ich sitze fast 2 Tage an diesem Problem, habe auch schon einiges gelesen und ausprobiert. Aber es will einfach nicht funktionieren.

    Ich schicke per JS eine Variable an eine externe php-Datei. Dort soll eine Session-Variable gesetzt werden, die ich in der Index wieder abfragen möchte. Das ist nur ein modellhafter Aufbau, der aber in allen Browsern, außer dem Explorer funktioniert.

    Nur warum funktioniert es nicht?

    Hier die index.php
    PHP-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <script type="text/javascript" src="/js/jquery.js"></script>

    <script type="text/javascript"> 
    $(document).ready(function() {
        $('#login_btn').click(function(evt) {
            var getDaten = "username=user";
            $.post('externe_login.php',getDaten,function(verarbeiteDaten){    // Daten abschicken
                if(verarbeiteDaten)    { 
                    alert(verarbeiteDaten);
                    location.reload();
                }                                                
            });
            evt.stopPropagation();
            return false;
        });
    });
    </script>
    <?php
    session_start
    ();

    $loginsession $_SESSION['login'];
    echo 
    " loginsession: $loginsession <br />"

    ?>
    </head>

    <body>
        <span id="login_btn" style="cursor:pointer">login</span>
    </body>
    </html>
    Und hier die externe PHP-Datei

    <?php
    session_start();
    PHP-Code:
    $username             $_POST['username'];
    $_SESSION['login']     = $username;
    echo 
    $_SESSION['login']; 
    ?> 
    schöne Grüße
    Janina

  • #2
    Aber es will einfach nicht funktionieren.
    Das äuert sich wie? Wie testest Du die Funktionalität?
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Cookies aktiviert?

      Kommentar


      • #4
        Hallo nikosch

        Eigentlich teste ich garnicht, fürchte ich. Ich gebe nur per:
        PHP-Code:
        echo " loginsession: $loginsession <br />"
        die Session-Variable aus. Und in allen Browsern, nur eben nicht der IE, gibt "user" aus

        Kommentar


        • #5
          Ich würde spontan drauf tippen das der IE aus irgend einem Grund den Session-Cookie nicht mitsendet.

          Aber ohne entsprechende Debug-Ausgaben kann man grad nur vermuten.

          Du könntest die Session-ID mal in den Postdaten mitsenden um zu sehen ob es dann geht.
          "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

          Kommentar


          • #6
            Hallo Flor1an,

            laut Datenschutzrichtlinie des Explorers sind keine Cookies geblockt bzw. eingeschränkt.

            Kommentar


            • #7
              Hallo Dark Guardian,

              ich habe die Session-ID mit in die Parameterliste genommen und mitgeschickt

              PHP-Code:
              <script type="text/javascript"> 
              $(document).ready(function() {
                  $('#login_btn').click(function(evt) {
                      var sessionid = $(this).attr('title');
                      var getDaten = "username=user&session_id="+sessionid;
                      $.post('externe_login.php',getDaten,function(verarbeiteDaten){    // Daten abschicken
                          if(verarbeiteDaten)    { 
                              alert(verarbeiteDaten);
                              location.reload();
                          }                                                
                      });
                      evt.stopPropagation();
                      return false;
                  });
              });
              </script>
              <?php
              session_start
              ();

              $loginsession $_SESSION['login'];
              echo 
              " loginsession: $loginsession <br />"

              $session_id session_id();
              //echo " session_id: $session_id <br />"; 

              ?>
              </head>

              <body>
                  <span id="login_btn" title="<?php echo session_id(); ?>" style="cursor:pointer">login</span>
              </body>
              </html>
              dort kommen sie auch an

              PHP-Code:
              <?php 
              session_start
              ();
              $username             $_POST['username'];
              $sessionid             $_POST['session_id'];
              $_SESSION['login']     = $username;
              //echo $sessionid; 
              ?>
              nur was mach ich damit in der externen Datei?

              Kommentar


              • #8
                Warum erzeugt der IE eigentlich bei jedem Refresh eine neue Session-ID und der Firefox nicht?

                Kommentar


                • #9
                  Zitat von Janina Beitrag anzeigen
                  Warum erzeugt der IE eigentlich bei jedem Refresh eine neue Session-ID und der Firefox nicht?
                  Genau darum geht es bei der Aktion.

                  Die Session-ID wird von PHP standardmäßig in Cookies abgelegt oder automatisch an Links und Formulare als Parameter angehängt.

                  Findet PHP die ID nicht in den GET/Post Parametern greift PHP automatisch auf die Session-ID aus dem Cookie zurück. Wenn der Browser also keinen Cookie sendet, kommt auch keine ID an -> PHP erzeugt eine neue.

                  Ich glaube damit PHP die findet muss der Parameter PHPSESSID oder so heißen. Mehr dazu fidnest du aber im PHP Handbuch unter http://www.php.net/manual/de/book.session.php

                  Das Verhalten steuert man im übrigen über die php.ini. Aber dazu fidnest du einiges im Manual.

                  Du kannst mit session_id() die Session-ID auch setzen. Das ist aber an sich nun nicht so schön da du sie mitsenden musst und dein Script somit Manipulationen aussetzt. Ein Angreifer bräuchte nur die Session-ID eines anderen Users, diese an deine AJAX-Requests schicken und erhält ggf. Zugang zu Daten die ihm nicht zugänglich sein sollten.

                  Find lieber heraus was der IE7 für ein Problem mit den Cookies hat.
                  "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                  Kommentar


                  • #10
                    Ähem. Das wird so sowieso nicht funktionieren:

                    return false;
                    });
                    });
                    </script>
                    <?php
                    session_start();
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Das ist doch hier egal - Bei der externen Datei wird das session_start() am Anfang aufgerufen.

                      Wird die externe Datei vom IE überhaupt erreicht? Z. B. ist es so, dass der IE den Basetag in JS-Funktionen nicht benutzt. Vielleicht gibt es da noch andere Sachen solcher Art..

                      Kommentar


                      • #12
                        Ich finde den Hinweis nicht egal!
                        M.E. sind die erforderlichen Dinge zum Thema von Dark Guardian gesagt worden.
                        Hinweise auf weitere "Fehler" sollten nicht einfach als "hier unwichtig" abgetan werden...
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Hallo Leute,

                          ich habe das Beispiel nochmals stark vereinfacht

                          index2.php
                          PHP-Code:
                          <?php
                          session_start
                          ();
                          echo 
                          "aktuelle Session: ".$_SESSION['login']."<br />";

                          $unset $_REQUEST['unset'];
                          if(
                          $unset == "unset")unset($_SESSION['login']);
                          ?>

                          <br />
                          <a href="externe.php?setSession=login">Externe Datei</a>
                          <br /><br />
                          <a href="index2.php?unset=unset">unset</a>
                          und externe.php
                          PHP-Code:
                          <?php 
                          session_start
                          ();
                          $login                 $_GET['setSession'];
                          $_SESSION['login']     = $login;
                          echo 
                          "SESSION: ".$_SESSION['login']."<br />";

                          $unset $_REQUEST['unset'];
                          if(
                          $unset == "unset")unset($_SESSION['setSession']); 
                          ?>

                          <br />
                          <a href="index2.php">zur&uuml;ck</a>

                          <br /><br />
                          <a href="externe.php?unset=unset">unset</a>
                          das verrückte: ich habe die Dateien mal Online getestet und dort funktioniert es im IE, die $_SESSION['login'] bleibt beim zurückgehen auf die index2.php erhalten.
                          Auf meinem lokalen Server funktioniert das nicht.
                          Ich habe lokal einige vhosts zum Testen eingerichtet, liegt es evtl. daran?
                          Oder an den Einstellungen in der php.ini?
                          Aber dann würde es auf den anderen Browsern auch nicht funktionieren.

                          schöne Grüße
                          Janina

                          Kommentar


                          • #14
                            $_REQUEST
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Hallo Arne,

                              register_globals = off ist die Einstellung in der php.ini oder worauf wolltest Du hinweisen?

                              Kommentar

                              Lädt...
                              X