romy: sessions auf fremden servern + include

Hi,

tja, da bin ich wieder mit einem Verständnisproblem:
nehmen wir mal an, es gibt server1 und server2

server1 includiert Dateien von server2
m.E. werden die Dateien (*.php) auf server2 ausgeführt und das Ergebnis an server1 übermittelt.
d.h. wenn auf server2 eine session besteht, können die dateien, die dort laufen, darauf zugreifen und liefern ja erst das Ergebnis, also nach der Abfrage der sessions, an server1 zurück.

beispiel:
ich möchte eine Datei includieren, die eine session startet und eine Variable setzt, diese variable sollte mir dann angezeigt werden.

start.php

--------------------------------------------------------------
<?

if(!isset($wo)) $wo = "session";

echo "Test-Seite<br><br>";
echo "<hr>";
include("http://<server2>/session/".$wo.".php");
echo "<hr>";

?>
---------------------------------------------------------------

session.php
---------------------------------------------------------------
<?

session_start();
session_register("hallo");

$hallo = 3;

?>
session:<br>
<a href="http://<server1>/01.test/session_beispiel/start.php?wo=session1">dorthin<br></a>

<?
echo "alle registrierten Variablen<br>";
foreach($HTTP_SESSION_VARS as $key => $value) {
 echo $key.": ".$value."<br>";
}

?>
---------------------------------------------------------------

session1.php
---------------------------------------------------------------
<?

session_start();
session_register("hallo");

?>
session1:<br>
<a href="http://<server1>/01.test/session_beispiel/start.php?wo=session">dorthin<br></a>

<?
echo "alle registrierten Variablen<br>";
foreach($HTTP_SESSION_VARS as $key => $value) {
 echo $key.": ".$value."<br>";
}

?>
---------------------------------------------------------------

dem scheint nicht so, da ich keinerlei session-Daten angezeigt bekomme
obwohl doch die session auf server2 gesetzt sein sollte. Hab ich einen Denkfehler?

ciao
romy

--
DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
  1. server1 includiert Dateien von server2
    m.E. werden die Dateien (*.php) auf server2 ausgeführt und das Ergebnis an server1 übermittelt.
    d.h. wenn auf server2 eine session besteht, können die dateien, die dort laufen, darauf zugreifen und liefern ja erst das Ergebnis, also nach der Abfrage der sessions, an server1 zurück.

    Das funktioniert nur, wenn Du die Sessionkennung in die URL steckst (bzw. stecken lässt). PHP akzeptiert keine Cookies, ohne Cookie kann Server 2 Server 1 keine Kennung verpassen, ohne Kennung keine Session.

    Gruß,
      soenk.e

    1. Hi,

      server1 includiert Dateien von server2
      m.E. werden die Dateien (*.php) auf server2 ausgeführt und das Ergebnis an server1 übermittelt.
      d.h. wenn auf server2 eine session besteht, können die dateien, die dort laufen, darauf zugreifen und liefern ja erst das Ergebnis, also nach der Abfrage der sessions, an server1 zurück.

      Das funktioniert nur, wenn Du die Sessionkennung in die URL steckst (bzw. stecken lässt). PHP akzeptiert keine Cookies, ohne Cookie kann Server 2 Server 1 keine Kennung verpassen, ohne Kennung keine Session.

      mhm, aber server1 brauch doch gar keinen cookie oder session, es soll sich ja auf server2 abspielen, letztendlich will ich ja nur das Ergebnis auf server1 anzeigen.

      Ich verstehe nur nicht, warum das jetzt auftritt, die ganze Zeit habe ich das Problem, dass die php-seiten, die ich mittels include, fopen und sonstiges öffnen wollte schon ausgeführt werden und demzufolge mir schon das Ergebnis (also das reine HTML) liefern und gerade bei den session soll das anders sein?

      Ich vermute eher einen Denkfehler meinerseits.

      mal noch etwas vereinfacht. server2 beinhaltet eine seite die ein echo $_SESSION["hallo"] drin hat, "hallo" ist registriert (nehmen wir jetzt mal an) und hat einen Wert. Jetzt includiere ich diese Datei auf server1. Was passiert? server2 sollte den quellcode ausführen, die Variable anzeigen und das ergebnis zurückgeben, oder nicht?

      Oder meinst Du, das die session gar nicht gesetzt wird (bzw. jedesmal ne neue angelegt), da die dateien nicht untereinander kommunizieren sondern auf dem Umweg über die includierende Seite.

      Bloss wie kann ich dieses Dilemma lösen?

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
      Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
      Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
      1. Hi,

        Oder meinst Du, das die session gar nicht gesetzt wird (bzw. jedesmal ne neue angelegt), da die dateien nicht untereinander kommunizieren sondern auf dem Umweg über die includierende Seite.

        ich denke, hiermit lag ich nicht so falsch

        Bloss wie kann ich dieses Dilemma lösen?

        --- zur Erklärung fürs Archiv ---
        Gelöst habe ich es jetzt (extrem unelegant) indem ich an die links die includiert werden die session_id dranhänge und diese dann auch per get dem includebefehl wieder mitgebe. Alles ziemlich eklig, da unsicher durch die Übertragung im querystring.
        Nachdem die $PHPSESSID sich imemr erst nach dem 3. Mal setzte bin ich auch draufgekommen, dass diese ja wie eine normale session-Variable gehandhabt wird und die ID logischerweise in session_id() drinsteht.

        Ich glaube ich beschäftige mich doch noch mal mit fsocketopen() um eine elegantere Lösung zu finden.

        ciao
        romy

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
        Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
        Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
        1. Oder meinst Du, das die session gar nicht gesetzt wird (bzw. jedesmal ne neue angelegt), da die dateien nicht untereinander kommunizieren sondern auf dem Umweg über die includierende Seite.

          ich denke, hiermit lag ich nicht so falsch

          In der Tat.

          Erstens ist ein PHP-Skript nach außen kein PHP-Skript, sondern was immer das PHP-Skript ausgibt. Die Skripte können also nicht miteinander "kommunizieren", schließlich weiß keiner etwas von der Existenz des anderen. Es wird lediglich vom Skript auf Server 1 irgendein Text, den das PHP-Skript auf Server 2 ausgibt, eingelesen.

          Zweitens bestehen Sessions aus zwei Teilen: Den Daten auf dem Server und einer Kennung im Client (die Session-ID). Die Kennung _muß_ an den abrufenden Client übermittelt werden und sie _muß_ vom Client beim nächsten Abruf wieder an den Server geliefert werden. Anders hat der Server keine Möglichkeit, die bei ihm gespeicherten Daten dem Client wieder zuzuordnen.

          Dein Problem liegt genau bei Punkt 2. Das Skript von Server 2 liefert eine Session-ID aus, der abrufende Server 1 übernimmt diese ID aber nicht. Es wird also zwar durchaus eine Session angelegt, aber wenn Dein abrufendes Skript 1 dem Server 2 diese ID beim nächsten Mal nicht wieder mitliefert, kann die alte Session auch nicht wieder aufgemacht werden.

          Wie Du also schon richtig erkannt hast, mußt Du irgendwie die Kennung aufnehmen und zurückgeben. Die Session-ID findest Du möglicherweise im Feld $_COOKIE, beim Abruf solltest Du die ID an die URL anhängen können.

          Gruß,
            soenk.e