stemer: weg?

Hallo,

Warum geht mir die Session verloren wenn ich eine Datei Include?

Code:
include "checkuser.php"

$inhalt[] = "link"; (in diesen Dateien sollte ich die Session Variablen haben)
$inhalt[] = "link";

$anzahllinks=count($inhalt);
srand((double)microtime()*10000000);
$ausgabe=rand(0,$anzahllinks-1);
include $inhalt[$ausgabe];

Wäre froh wenn mir jemand helfen könnte. Besten Dank

Gruss stemer

--
SM
  1. yo,

    Warum geht mir die Session verloren wenn ich eine Datei Include?

    steht den in der include datei in der ersten zeile diese funktion session_start() ?

    Ilja

    1. Hallo,

      Aber sicher ;-)

      steht den in der include datei in der ersten zeile diese funktion session_start() ?

      Gruss stemer

      --
      SM
      1. yo,

        und zeigst du uns noch die include datei oder bleibt sie ein geheimnis ?

        Ilja

        1. Hallo,

          und zeigst du uns noch die include datei oder bleibt sie ein geheimnis ?

          klaro:
          <?php
          session_start ();
          if (!isset ($_SESSION["email"]))
          {
            header ("Location: formular.php");
          }
          ?>

          aber um die gehts gar nicht.

          gruss Stef

          1. yo,

            aber um die gehts gar nicht.

            das können wir aber nicht wissen, dass mit der include datei alles in ordnung ist, bevor man sie nicht gesehen hat. ;-)

            meiner meinung liegt es nicht daran, dass du eine datei mit include einbindest, das mache ich auch und ich behalte die session. also sollte der fehler "woanders" sein. aber mal so eine ganz dumme frage, woran siehst du den, dass die session variablen nach der include datei nicht mehr zur verfügung stehen, bzw. was ergibt den ein echo $_SESSION["email"] direkt nach dem include ?

            Ilja

            1. Hallo Ilja,

              Es wird nichts ausgegeben, daraus schliesse ich das die Session nicht mehr Extistent ist.

              »»include datei nicht mehr zur verfügung stehen, bzw. was ergibt den ein echo $_SESSION["email"] direkt nach dem include ?

              Also nochmal:

              include ("checkuser.php");

              //Hier wird die Session noch ausgegeben

              $inhalt[] = "http://www.1page.ch/klick4win/758648632/15_minus.php";
              $inhalt[] = "http://www.1page.ch/klick4win/758648632/20_plus.php";
              $inhalt[] = "http://www.1page.ch/klick4win/758648632/klick4win.php";
              $inhalt[] = "http://www.1page.ch/klick4win/758648632/20_minus.php";
              $inhalt[] = "http://www.1page.ch/klick4win/758648632/15_plus.php";

              $anzahllinks=count($inhalt);
              srand((double)microtime()*10000000);
              $ausgabe=rand(0,$anzahllinks-1);
              include $inhalt[$ausgabe];

              // aber hier nicht mehr nach dem Include

              Gruss Stef

              1. sorry, das heisst

                ich muss die Variablen im eingebundenen also Inkludierten Datei haben

                zb:
                http://www.1page.ch/klick4win/758648632/15_minus.php
                in dieser

                Sorry bin etwas Kompliziert

                1. yo,

                  ich muss die Variablen im eingebundenen also Inkludierten Datei haben

                  das heisst die session wird wohl noch aktiv sein, nur eben nicht so einfach abrufbar in der zweiten include datei ?

                  Ilja

                  1. Hallo,

                    Ja genau, ich vermute mal das sie noch Aktiv ist. ;-)

                    das heisst die session wird wohl noch aktiv sein, nur eben nicht so einfach abrufbar in der zweiten include datei ?

                    Ilja

                    1. yo,

                      include ist eine funktion. insofern sind die variablen gleichen names in der include datei wohl auch "eigene" variablen. versuch es mal mit require() anstelle von include.

                      Ilja

                      1. Hallo
                        Habe ich schon probiert sogar mit require_once.

                        include ist eine funktion. insofern sind die variablen gleichen names in der include datei wohl auch "eigene" variablen. versuch es mal mit require() anstelle von include.

                        Gruss Stef

                        1. yo,

                          Habe ich schon probiert sogar mit require_once.

                          da bin ich dann doch sprachlos. aber ich bin auch nicht wirklich ein php experte. insofern meldet sich ja vielleicht noch jemand, der mehr ahnung davon hat. ;-)

                          Ilja

                          1. Hallo,

                            Auf jeden Fall Herzlichen Dank für deine Mühe ;-)

                            da bin ich dann doch sprachlos. aber ich bin auch nicht wirklich ein php experte. insofern meldet sich ja vielleicht noch jemand, der mehr ahnung davon hat. ;-)

                            Gruss Stef

                            1. Hallo,

                              Habe es jetzt ein wenig anders gemacht, doch komme ich jetzt auch nicht weiter ;-)

                              Wie kann ich jetzt ne Id erstellen für das Bild?

                              Code:
                              <?php
                              include ("/home/www/???/html/klick4win/checkuser.php");

                              //Habe es mal so versucht, klappt natürlich nicht

                              $id[1]="-15".$inhalt[] = "./images/poker/k-8.gif";
                              $id[2]="+25".$inhalt[] = "./images/poker/r-6.gif";
                              $id[3]="-20".$inhalt[] = "./images/poker/h-a.gif";
                              $id[4]="+15".$inhalt[] = "./images/poker/r-6.gif";
                              $id[5]="-22".$inhalt[] = "./images/poker/s-d.gif";

                              $anzahllinks=count($inhalt);
                              srand((double)microtime()*10000000);
                              $ausgabe=rand(0,$anzahllinks-1);

                              ?>
                              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                              <html>
                              <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                              <link rel="stylesheet" type="text/css" href="style.css">
                              <title>- 15 Punkte</title>
                              </head>

                              <body>
                              <table width="70%" border="0" align="center" cellpadding="10" cellspacing="2" class="win">
                                <tr>
                                  <td><div align="center">
                                    <table width="100%" border="0" cellpadding="0" cellspacing="0">
                                      <tr>
                                        <td><div align="center">
                                          <? echo "<h3>$id</h3>"?>
                                        </div></td>
                                      </tr>
                                    </table>
                                          <? echo "<img src=$inhalt[$ausgabe]>";?><br>
                                      <br><strong>Deinem Konto wurden  15 Punkte abgezogen </strong></div></td>
                                </tr>
                              </table>
                              </body>
                              </html>

                              Gruss Stef

                      2. Moin!

                        include ist eine funktion. insofern sind die variablen gleichen names in der include datei wohl auch "eigene" variablen. versuch es mal mit require() anstelle von include.

                        Nein, da liegst du falsch.

                        Include ist keine Funktion, sondern ein Sprachkonstrukt, was Auswirkungen auf die Anwendbarkeit in bestimmten Situationen hat (die hier nicht vorliegen). Siehe dazu http://www.php.net/include.

                        Außerdem sind include und require bis auf ihr Verhalten, wenn die eingebundene Datei nicht gefunden wird, absolut identisch.

                        Dein Tipp kann also am Problem nichts ändern.

                        • Sven Rautenberg
                        1. yo,

                          Außerdem sind include und require bis auf ihr Verhalten, wenn die eingebundene Datei nicht gefunden wird, absolut identisch.

                          ich habe nochmal in meinen buch nachgeschaut, "grundlagen und profiwissen" von Jörg Krause. und dort werden schon unterschiede gemacht, zum beispiel das require vor dem parsen eingebunden wird und include erst beim abarbeiten. da scheint mir dan wohl mein buch etwas vorzugaukeln.

                          Ilja

                          1. Moin!

                            ich habe nochmal in meinen buch nachgeschaut, "grundlagen und profiwissen" von Jörg Krause. und dort werden schon unterschiede gemacht, zum beispiel das require vor dem parsen eingebunden wird und include erst beim abarbeiten. da scheint mir dan wohl mein buch etwas vorzugaukeln.

                            Richtig, diese Informationen sind komplett veraltet. Überhaupt kann man diesen Krause und seine PHP-Bücher leider nicht so ganz ernst nehmen, da stecken auch viele Fehler drin.

                            Die einzige wirkliche Informationsquelle ist und bleibt php.net - dort sind die neuesten und korrektesten Beschreibungen und außerdem viele hilfreiche User-Anmerkungen zu finden.

                            • Sven Rautenberg
              2. Moin!

                $inhalt[] = "http://www.1page.ch/klick4win/758648632/15_minus.php";
                $inhalt[] = "http://www.1page.ch/klick4win/758648632/20_plus.php";
                $inhalt[] = "http://www.1page.ch/klick4win/758648632/klick4win.php";
                $inhalt[] = "http://www.1page.ch/klick4win/758648632/20_minus.php";
                $inhalt[] = "http://www.1page.ch/klick4win/758648632/15_plus.php";

                Wenn ich diese URLs aufrufe, erhalte ich reinen HTML-Code, aber kein einziges Byte PHP-Code.

                Da diese Dateien aber keinen PHP-Code enthalten, kann auch nichts dynamisches passieren, auch nichts mit Sessions. Das einzige, was passiert, wenn

                include $inhalt[$ausgabe];

                aufgerufen wird, ist die Ausgabe des von obigen URLs abrufbaren HTML-Textes an dieser Stelle in der aktuellen Seite.

                • Sven Rautenberg
                1. Hello,

                  Hatte ich auch wieder rausgenommen ;-)

                  Wenn ich diese URLs aufrufe, erhalte ich reinen HTML-Code, aber kein einziges Byte PHP-Code.

                  Aber Danke, ich mache das ganze jetzt anders, nicht mehr so kompliziert.

                  Gruss Stef

            2. Moin!

              meiner meinung liegt es nicht daran, dass du eine datei mit include einbindest, das mache ich auch und ich behalte die session. also sollte der fehler "woanders" sein.

              Sehe ich genau so. Aber wir haben ja immer noch keinen Gesamtcode gesehen, sondern immer nur winzige Ausschnitte, von denen der Fragesteller annimmt, dass dort das Problem liegt - was aber, wenn diese Fehleranalyse falsch ist?

              Als bitte mehr Code - genauer gesagt: Den ganzen Code, auch den von den $inhalt-Dateien.

              • Sven Rautenberg
          2. Hi Stefan,

            header ("Location: formular.php");

            Da gehört eine absolute URI hin, also http://www.deinedomain.de/pfad/zum/formular.php

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
            Den Selfcode kann man sich übrigends hier entschlüsseln lassen:
            http://www.peter.in-berlin.de/projekte/selfcode/
            1. Hallo Dennis.

              header ("Location: formular.php");

              Da gehört eine absolute URI hin, also http://www.deinedomain.de/pfad/zum/formular.php

              Nö, muss nicht. Wie oben angegeben funktioniert es auch, wobei ich die Schreibweise vom DocumentRoot aus bevorzuge.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
              Try it: Become an Opera Lover in 30 days
              Meine Browser: Opera 7.54 | Firefox 1.0.2 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
              1. Moin!

                header ("Location: formular.php");

                Da gehört eine absolute URI hin, also http://www.deinedomain.de/pfad/zum/formular.php

                Nö, muss nicht. Wie oben angegeben funktioniert es auch, wobei ich die Schreibweise vom DocumentRoot aus bevorzuge.

                Nur weil einige Browser das so akzeptieren, ändert das noch lange nicht die RFC für HTTP. Und die sagt eindeutig "vollständige URL".

                • Sven Rautenberg
                1. Hallo Sven.

                  Nur weil einige Browser das so akzeptieren, ändert das noch lange nicht die RFC für HTTP. Und die sagt eindeutig "vollständige URL".

                  Ich habe es eben im Lynx getestet und erhielt in der Tat die Meldung "URL ist not absolute.", wonach Lynx jedoch die Originalseite aufrief, was sowieso bezweckt war.

                  Aber ich glaube, auf dieses Toleranzverhalten kann ich mich nicht verlassen, ich ändere mein Script entsprechend, danke für den Hinweis.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                  Try it: Become an Opera Lover in 30 days
                  Meine Browser: Opera 7.54 | Firefox 1.0.2 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                  1. Moin!

                    Ich habe es eben im Lynx getestet und erhielt in der Tat die Meldung "URL ist not absolute.", wonach Lynx jedoch die Originalseite aufrief, was sowieso bezweckt war.

                    Tools wie wget machen es dir nicht so einfach.

                    Aber ich glaube, auf dieses Toleranzverhalten kann ich mich nicht verlassen, ich ändere mein Script entsprechend, danke für den Hinweis.

                    Ein HTTP-kompatibler Client ist eben nicht verpflichtet, den Arsch des faulen Programmierers zu retten. Dabei ist es mit PHP doch so einfach zu realisieren: Da schreibt man sich einfach eine kleine Funktion "redirect", die man dann ggf. auch mit relativen Pfadangaben aufrufen kann - fertig.

                    • Sven Rautenberg
                    1. Hallo Sven.

                      Da schreibt man sich einfach eine kleine Funktion "redirect", die man dann ggf. auch mit relativen Pfadangaben aufrufen kann - fertig.

                      Ich habe es jetzt mittels folgender Umschreibung gelöst:

                      header("location: http://".$_SERVER["HTTP_HOST"]."/site.php");

                      Gibt es hieran noch etwas auszusetzen? Ich habe keine Lust, vor jedem Hochladen den Hostnamen im Script ändern zu müssen, damit die header(); Funktion funtktionstüchtig bleibt.

                      Gruß, Ashura

                      --
                      Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                      Try it: Become an Opera Lover in 30 days
                      Meine Browser: Opera 7.54 | Firefox 1.0.2 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                      1. Moin!

                        Ich habe es jetzt mittels folgender Umschreibung gelöst:

                        header("location: http://".$_SERVER["HTTP_HOST"]."/site.php");

                        Da ist nichts dran auszusetzen, der HTTP_HOST wird von den modernen Browsern immer gesetzt (unmoderne Browser haben mit den existierenden virtuellen Hosts schon seit vielen Jahren ein gravierendes Problem und werden deshalb nicht mehr so häufig eingesetzt ;) ).

                        • Sven Rautenberg
                        1. Hallo Sven.

                          Da ist nichts dran auszusetzen, der HTTP_HOST wird von den modernen Browsern immer gesetzt (unmoderne Browser haben mit den existierenden virtuellen Hosts schon seit vielen Jahren ein gravierendes Problem und werden deshalb nicht mehr so häufig eingesetzt ;) ).

                          Ich danke dir. ;)

                          Gruß, Ashura

                          --
                          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                          Try it: Become an Opera Lover in 30 days
                          Meine Browser: Opera 7.54 | Firefox 1.0.2 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
  2. Hiho stemer

    include "checkuser.php"

    Du, eigentlich kann ich dir gar nicht helfen, aber das hier ist falsch geschrieben ==> include("checkuser.php"); wäre richtig.
    Vielleicht unterdrückt PHP die Fehlermeldung die eigentlich kommen sollte, wobei das Verlorengehen der Session ein Nebeneffekt sein könnte...

    Wäre froh wenn mir jemand helfen könnte. Besten Dank

    Ich hoffe, das habe ich ...

    1. Hallo,

      Hoppla, Fehler eingeschlichen, natürlich habe ich im Skript include ("checkuser.php");

      Habe es nur hier falsch geschrieben.

      include "checkuser.php"
      Du, eigentlich kann ich dir gar nicht helfen, aber das hier ist falsch geschrieben ==> include("checkuser.php"); wäre richtig.

      Gruss stemer

      --
      SM
    2. Hi trolli[ng][g]ger,

      include "checkuser.php"
      Du, eigentlich kann ich dir gar nicht helfen, aber das hier ist falsch geschrieben ==> include("checkuser.php"); wäre richtig.

      Nein, es geht auch ohne.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
      Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
      1. Hallo Dennis.

        include "checkuser.php"
        Du, eigentlich kann ich dir gar nicht helfen, aber das hier ist falsch geschrieben ==> include("checkuser.php"); wäre richtig.

        Nein, es geht auch ohne.

        Ohne "()" ja, ohne ";" nein. ;)

        Gruß, Ashura

        --
        Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
        Try it: Become an Opera Lover in 30 days
        Meine Browser: Opera 7.54 | Firefox 1.0.2 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
  3. habe d'ehre

    $inhalt[] = "link"; (in diesen Dateien sollte ich die Session Variablen haben)
    $inhalt[] = "link";

    Inwiefern soll $inhalt[] einen Bezug zu den Variablen von $_SESSION haben? Wann, wo und wie wird das Array gefuellt?

    man liest sich
    Wilhelm

  4. Hallo!

    $inhalt[] = "link"; (in diesen Dateien sollte ich die Session Variablen haben)
    $inhalt[] = "link";

    $anzahllinks=count($inhalt);
    srand((double)microtime()*10000000);
    $ausgabe=rand(0,$anzahllinks-1);
    include $inhalt[$ausgabe];

    Eine kleine Anmerkung am Rande:
    Wenn register_globals=on sind und $inhalt nicht initialisiert wird, kann man hier eigenen PHP-Code ausführen. Man muss lediglich "?inhalt[0]=http://..." übergeben und das Script ein paar mal ausführen.

    Grüße
    Andreas

    --
    SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/