Announcement

Collapse
No announcement yet.

Session geht nach location.href verloren!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Session geht nach location.href verloren!

    Hallo liebe Community,

    ich habe eine Problem, immer wenn ich einen Redirect mit:

    Code:
    location.href = 'xxx.php';
    mache geht danach meine Session verloren.

    Ich habe in beiden Dokumenten meine Session mit:

    PHP Code:
    session_start(); 
    gestartet.

    Und frage meine Variablen mit
    PHP Code:
    $_SESSION[xxx]; 
    ab.

    Das hat vorher auch immer funktioniert, auch ohne eine Session Variable zu übergeben.
    Die Session war immer vorhanden nur nachdem oben aufgeführten Javascript ist die Session immer verloren gegangen.

  • #2
    Hallo,

    dann wird offensichtlich kein Cookie für die Speicherung der Session-ID verwendet, sondern diese per URL übertragen. Für alle von PHP erzeugten Seiten sorgt die PHP-Engine für das Anhängen der Session-ID an die URLs. Bei Redirects per Javascript mußt du selbst dafür sorgen!
    Oder du aktivierst die Verwendung eines Session-Cookie.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      So hier mal betroffene Scripts, ich hab da noch einige Testvariablen drin,
      die Sessions werden korrekt übergeben die ID's stimmen in den Dateien überein, aber die Daten bleiben leer:

      login.php:
      PHP Code:
      <?php
      error_reporting
      (E_ALL);
      ini_set('display_errors'TRUE); 
       
      session_start();
      if(isset(
      $_GET["SID"])) session_id($_GET["SID"]);

      echo 
      $_GET["SID"]."SID<br>";
      echo 
      $_SESSION['test']; ?>

      <table>
        <tr>
          <td><u>Kämpferinformationen</u></td>
          <td><u>Aktionen</u></td>
        </tr>
        <tr>
          <td>
            <?php
              
      include('mysql-data.php');

              echo 
      "Username          : $user<br>";
              echo 
      "Beschreibung      : $description<br>";
              echo 
      "Rasse             : $rasse<br>";
              echo 
      "Geschlecht        : $sex<br>";
              echo 
      "Level             : $level<br>";
              echo 
      "Angriffskraft     : $attackpower<br>";
              echo 
      "Verteidigungskraft: $defensepower<br>";
              echo 
      "Waffe             : $weapon<br>";
              echo 
      "Erfahrung         : $experience<p>";

              
      $_SESSION['user']         = $user;
              
      $_SESSION['description']  = $description;
              
      $_SESSION['rasse']        = $rasse;
              
      $_SESSION['sex']          = $sex;
              
      $_SESSION['level']        = $level;
              
      $_SESSION['attackpower']  = $attackpower;
              
      $_SESSION['defensepower'] = $defensepower;
              
      $_SESSION['weapon']       = $weapon;
              
      $_SESSION['experience']   = $experience;

            
      ?>
          </td>
          <td>
            <a href="/game/fight.php">KÄMPFEN</a><br>
            <a href="/game/training.php">TRAINING</a><br>
          </td>
        </tr>
      </table>
      mysql-data.php:
      PHP Code:
      <?

      $getuser      = $_POST['name'];
      $password     = $_POST['password'];



      $sqlget = "SELECT * FROM user WHERE name='".$getuser."';";  

       $mysql1 = mysql_connect("localhost", "ich seh zwar", "dumm aus");

       if (!$mysql1)
       {
       echo "MySQL connect Problem (1.).<br>";
       die();
       }

       $mysql2 = mysql_select_db("benutzer", $mysql1);
       
       if (!$mysql2)
       {
       echo "MySQL select db Problem (2.).<br>";
       }

      $mysql3 = mysql_query($sqlget) OR DIE($sqlget.'<br><br>'.mysql_error()); 

      if (!$mysql3)
      {
      echo "MySQL query select Problem (3.).<br>";
      }



      $row = mysql_fetch_object($mysql3);
               
          $passwordsql  = $row->password;

      if ($passwordsql == $password)
      {
          $user         = $row->name;
          $description  = $row->description;
          $rasse        = $row->rasse;
          $sex          = $row->geschlecht;
          $level        = $row->level;
          $attackpower  = $row->angriff;
          $defensepower = $row->defense;
          $weapon       = $row->weapon;
          $experience   = $row->experience;
      }

      else
      {
       echo "Falscher Benutzername oder Passwort!";
      }  

      ?>
      training.php:
      PHP Code:
      <?php 
      error_reporting
      (E_ALL);
      ini_set('display_errors'TRUE); 

      session_start(); ?>

      <html>
      <head>
        <script language="Javascript">
         
            <!--
              var initi = window.setInterval ('downcount()', 1000);
              var zahl = 10;
              var str_sid= "<?= session_id() ?>";
              var dokument="login.php?SID=" + str_sid;
              function downcount()
              {
              zeige = zahl+ ' Sekunden';
              window.status = zeige ;
              // für den Internet Explorer
              document.all['countdown'].value = zeige ;
              // für die neuen Netscape Versionen
              document.getElementById('countdown').disabled = true;
              document.getElementById('countdown').value = zeige ;
              zahl --;
              if (zahl < 0 )
              {
              location.replace(dokument);
              }
              }
          
       
            //-->
       
            </script>
      </head>

      <table>
        <tr>
          <td>
           Username:
          </td>
          <td>
            <?php echo $_SESSION['user']; ?>
            <?php echo session_id().":SID"?>
            <?php $_SESSION["test"] = "angekommen"?>
          </td>
        </tr>
        <tr>
          <td>
            Level trainieren!
          </td>
          <td>
            <form name="count">
            <input type="submit" id="countdown" name="countdown" value="Training!" onClick="javascript:downcount();">
            </form>
          </td>
          <td>
            <a href="login.php?SID=<?= session_id() ?>">Login</a>
          </td>
        </tr>
      </table>
      In der Datei: login.php sind nach dem redirect aus der Datei training.php keine Daten mehr in den Session-Variablen obwohl die Session aus den beiden Dateien übereinstimmt.

      Comment


      • #4
        Hallo,

        ohne das jetzt im Detail durchzusehen, aber bei Verwendung von session_id() mit Angabe einer expliziten ID muß dies VOR session_start() aufgerufen werden. Danach ist das Setzen der Session-ID wirkungslos!

        http://de3.php.net/manual/de/function.session-id.php
        Wenn id angegeben wird, wird die die aktuelle Session-ID ersetzt. session_id() muss zu diesem Zweck vor session_start() aufgerufen werden.
        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X