Unerkläriches Session Phänomen

deostift

Erfahrenes Mitglied
Hallo zusammen,

gerade eben sitze ich hier und werfe mit jeder Menge Fragezeichen um mich: Es geht um das PHP Session Handling.

Ganz grob fomuliert: Ich übergebe via SESSION-Objekt an ein Skript Parameter, mit denen eine Auswertungsgrafik gezeichnet wird. Eingebunden wird das Ganze im HTML mit dem image Tag:

Code:
<img src="/index.php?module=Chart&action=draw" alt="Chart">

Also eigentlich nichts ungewöhnliches. In dem Skript, das die Chart-Grafik erzeugt kann allerdings eine Exception geworfen werden, wenn z.B. keine Datentabelle gefunden wurde. Dann wird im Catch-Block eine alternative Grafik via Stream zurück gegeben - funktioniert auch.

Was allerdings nicht funktioniert, ist eine Löschung von Parametern aus dem Session Objekt oder das Session Objekt selbst via unset() im Catch-Block. Und genau das kapiere ich nicht: Zwar kann die Grafik erzeugt werden, aufgrund der Parameter aus der Session, allerdings kann ich das Session-Objekt nicht ändern... nur warum :confused: Liegt das an dem Skript-Aufruf mit dem IMG Tag - aber ich durchlaufe doch bei dem Aufruf die gleiche Prozedur (also session_start() etc.), biege aber nur im Code anders ab, um die Grafik zu zeichnen.

EDIT: Wenn ich direkt das Skript mit "/index.php?module=Chart&action=draw" aufrufe, werden die Parameter aus der Session gelöscht - weshalb dann nicht beim Skript Aufruf aus dem IMG-Tag heraus?
 
Zuletzt bearbeitet:
Okay, wobei ich eher vermute, dass ein Fehler NICHT im Code ist, sondern ein Verständis-Problem bei mir. Ich kann hier auch nicht das ganze Framework posten. Im Prinzip läuft es wie folgt:

PHP:
class Analysis extends ModuleController implements iIndex, iChart
{
  /**
   * ...
   *
   * @access public
   */
  public function index()
  {
    try {

      // Erzeugt das Formular mit dem die Chart Parameter in der Session gesetzt werden
      // z.B. via $_SESSION['analyse']['dimension1'] = 1;
    }
    catch (Exception $e) {
      echo "...".$e->getCode();
    }
  }
  // END index()


  /**
   * Module action 'chart': Displays the chart
   *
   * @access public
   */
  public function chart()
  {
    try {
	// Hier wird die Chart-Grafik mit der Chart Engine erzeugt und ausgegeben - Es kann aber auch eine Exception geworfen werden, die unten im Catch Block behandelt werden sollte 
    }
    catch (Exception $e) {
      echo $noChartImage;  // An error occured -> output the failure image stream
      unset($_SESSION['analyse']);
    }
  }
  // END chart()
  
  // ...

}
// END class Analysis

Diese Modul-Klasse Analysis wird von einem Controller aufgerufen, der auch den session_start() setzt.

Das Forumlar wird mit dem Aufruf der index() Funktion erzeugt. Unterhalb des Formulars wird nach einem Submit die IMG-Tag Zeile von oben gepostet (und damit die Funktion chart() aufgerufen).
 
Zuletzt bearbeitet:
Hi Kuddel,

danke für Deine Geldud - ich habe mir die das SESSION Objekt zu Beginn und am Ende der Skriptlaufzeit in ein Debug Log wegschreiben lassen.

Unter Opera hat es vorhin funktioniert -.-

Ich habe mich nun entschlossen, die SESSION Parameter an einer anderen Stelle freizugeben (löschen).

Ich setze mal das Thema auf "erledigt" obwohl noch Fragezeichen da sind ;)
 
Zurück