HILFE: POST Daten werden nicht in Session gespeichert

Hallo Community,

nach dem ich mich hier wund gesucht habe, versuch ich mein Glück hier und hoffe, dass mir einer von euch helfen kann.

Hintergrund ist folgender:
In einem Shop von mir habe ich in das Template _left.tpl ein neues Template includiert.
Das Template enthält einfach eine Form mit ein paar DropDown’s. Zu dem Template gibt es auch eine View Datei, diese enthält den folgenden Code:
Wird das Formular versendet per POST, dann will ich die Daten in die Session Schreiben.


$this->getSession()->setVar("farbe", $this->getConfig()->getParameter('farbe'));
oder
oxSession::setVar( 'groesse', $this->getConfig()->getParameter('groesse') );

danach erfolgt ein 

redirect("Location: index.php?cl=essearchresult");

dies ist ein anderer View, das ich erstellt habe.
In diesem View entnehme ich die Daten, die ich in dem oberen View in die Session gespeichert habe und generiere daraus eine SQL Abfrage…

das sieht dann z.B. so aus


public function render()
{	

		$this->_aViewData['sFarbe'] 	= $this->getFarbe();
		$this->_aViewData['sGroesse'] 	= $this->getGroesse();
		$this->_aViewData['sKragen'] 	= $this->getKragen();
		$this->_aViewData['sKategorie'] = $this->getKategorie();	
		
		parent::render();
		return $this->_sThisTemplate= "essearchresult.tpl";

}

public function getFarbe()
{		
	$this->sFarbe = oxSession::getVar('farbe');
		
        return $this->sFarbe;
}

public function getGroesse()
{	
	$this->sGroesse = $this->getSession()->getVar('groesse');
		
        return $this->sGroesse;
}

Jetzt kommt das eigentliche Problem. Es funktioniert alles. Auf die Daten kann ich in dem Template mit $oView->sFarbe zugreifen und ausgeben,
NUR nicht wenn ich wegen dem Efire Modul für Heidelpay in der config.inc.php
den Wert
$this->blDisableCookieCheck = true;
setze. Ab dem Zeitpunkt funktioniert das alles nicht mehr. Die Werte können nicht mehr in die Session geschrieben werden.

Ich habe schon alles versucht, ich weiss nicht mehr weiter. Hoffe einer von euch hat einen Tipp für mich.

Gruß Anatolij

Hallo Anatolij,

ich hab die Vermutung, daß er durch die fehlende Cookiebehandlung die Session nicht mehr eindeutig identifzieren kann. Versuch das mal so:

oxSession::getInstance()->getVar(’…’);

[QUOTE=DanielS;24768]Hallo Anatolij,

ich hab die Vermutung, daß er durch die fehlende Cookiebehandlung die Session nicht mehr eindeutig identifzieren kann. Versuch das mal so:

oxSession::getInstance()->getVar(’…’);[/QUOTE]

Hallo Daniel,

vielen Dank für deine Hilfe, leider hat es mir nicht geholfen.
Liegt eventuell das Problem in dem Redirect den ich ausführe?


redirect("Location: index.php?cl=essearchresult");

Wenn ich den Redirect deaktiviere und die Daten im essearch.tpl einfach mit einem “echo” ausgebe, dann werden mir die zuvor gesetzten Daten ausgegeben.


$sFarbe = oxSession::getInstance()->hasVar('farbe'); 
echo $sFarbe;	

Leider funktioniert die selbe Vorgehensweise nicht nach dem Redirect auf das essearchresult.tpl, dort wird dann kein Result geliefert, er ist leer.

Gibt es eine andere Möglichkeit wie ich das Problem eventuell umgehen kann?
Kann ich eventuell den “Select” der die entsprechenden Daten liefert bereits im
"essearch.tpl" machen und das zurück gelieferte Objekt zur Verarbeitung an das
"essearchresult.tpl" weitergeben?

Versuche mal statt des “redirect” “oxUtils::getInstance()->redirect( $this->getShopHomeURL() .‘cl=essearchresult’, true, 302 );” zu verwenden.

Die SESSION ist von einem redirect eigentlich nicht betroffen, außer wenn die Cookies deaktiviert sind, und beim redirect kein SESSIO-Id mit übergeben wird.

[QUOTE=avenger;24779]Versuche mal statt des “redirect” “oxUtils::getInstance()->redirect( $this->getShopHomeURL() .‘cl=essearchresult’, true, 302 );” zu verwenden.

Die SESSION ist von einem redirect eigentlich nicht betroffen, außer wenn die Cookies deaktiviert sind, und beim redirect kein SESSIO-Id mit übergeben wird.[/QUOTE]

Danke, hilft aber auch leider nicht weiter. Also ist es wohl nicht das Redirect.
Was komisch ist, wenn ich im “essearchresult.tpl” die Session ausgebe, dann

mit …

$mySession = oxSession::getInstance();
	echo "<pre>";
	 print_r($mySession);
	echo "</pre>";

Dann wird das ausgegeben, da ist aber von meinen Werten nix zu sehen :confused:

oxSession Object
(
    [_sName:protected] => sid
    [_sForcedPrefix:protected] => force_
    [_sId:protected] => 
    [_blNewSession:protected] => 
    [_sErrorMsg:protected] => 
    [_oBasket:protected] => oxBasket Object
        (
            [_aBasketContents:protected] => Array
                (
                )

            [_iProductsCnt:protected] => 0
            [_dItemsCnt:protected] => 0
            [_dWeight:protected] => 0
            [_oPrice:protected] => oxPrice Object
                (
                    [_dBrutto:protected] => 0
                    [_dNetto:protected] => 0
                    [_dVat:protected] => 0
                    [_blNetPriceMode:protected] => 
                )

            [_oProductsPriceList:protected] => oxPriceList Object
                (
                    [_aList:protected] => Array
                        (
                        )

                )

            [_aDiscounts:protected] => Array
                (
                )

            [_aItemDiscounts:protected] => Array
                (
                )

            [_sOrderId:protected] => 
            [_aVouchers:protected] => Array
                (
                )

            [_aCosts:protected] => Array
                (
                    [oxdelivery] => oxPrice Object
                        (
                            [_dBrutto:protected] => 0
                            [_dNetto:protected] => 0
                            [_dVat:protected] => 0
                            [_blNetPriceMode:protected] => 
                        )

                    [oxwrapping] => oxPrice Object
                        (
                            [_dBrutto:protected] => 0
                            [_dNetto:protected] => 0
                            [_dVat:protected] => 0
                            [_blNetPriceMode:protected] => 
                        )

                    [oxpayment] => oxPrice Object
                        (
                            [_dBrutto:protected] => 0
                            [_dNetto:protected] => 0
                            [_dVat:protected] => 0
                            [_blNetPriceMode:protected] => 
                        )

                )

            [_oDiscountProductsPriceList:protected] => oxPriceList Object
                (
                    [_aList:protected] => Array
                        (
                        )

                )

            [_oNotDiscountedProductsPriceList:protected] => oxPriceList Object
                (
                    [_aList:protected] => Array
                        (
                        )

                )

            [_blUpdateNeeded:protected] => 
            [_aBasketSummary:protected] => 
            [_sPaymentId:protected] => 
            [_sShippingSetId:protected] => 
            [_oUser:protected] => 
            [_oTotalDiscount:protected] => oxPrice Object
                (
                    [_dBrutto:protected] => 0
                    [_dNetto:protected] => 0
                    [_dVat:protected] => 0
                    [_blNetPriceMode:protected] => 
                )

            [_oVoucherDiscount:protected] => oxPrice Object
                (
                    [_dBrutto:protected] => 0
                    [_dNetto:protected] => 0
                    [_dVat:protected] => 0
                    [_blNetPriceMode:protected] => 
                )

            [_oCurrency:protected] => oxStdClass Object
                (
                    [id] => 0
                    [name] => EUR
                    [rate] => 1.00
                    [dec] => ,
                    [thousand] => .
                    [sign] => €
                    [decimal] => 2
                    [selected] => 0
                )

            [_blSkipVouchersAvailabilityChecking:protected] => 
            [_dDiscountedProductNettoPrice:protected] => 0
            [_aDiscountedVats:protected] => Array
                (
                )

            [_blSkipDiscounts:protected] => 
            [_oDeliveryPrice:protected] => 
            [_blCheckStock:protected] => 1
            [_blCalcDiscounts:protected] => 1
            [dproductsprice] => 0
            [dproductsnetprice] => 0
            [dVAT] => 0
            [fproductsprice] => 0,00
            [fproductsnetprice] => 0,00
            [fVAT] => 0,00
            [ddeliverycost] => 0
            [ddeliverynetcost] => 0
            [dDelVAT] => 0
            [fDelVATPercent] => 0
            [fdeliverycost] => 0,00
            [fdeliverynetcost] => 0,00
            [fDelVAT] => 
            [dWrappingPrice] => 0
            [dWrappingNetto] => 0
            [dWrappingVAT] => 0
            [fWrappingPrice] => 0,00
            [fWrappingNetto] => 
            [fWrappingVAT] => 
            [fWrappingVATPercent] => 0
            [dAddPaymentSum] => 0
            [dAddPaymentSumVAT] => 0
            [fAddPaymentSum] => 0,00
            [fAddPaymentSumVAT] => 
            [fAddPaymentSumVATPercent] => 0
            [fAddPaymentNetSum] => 0,00
            [dprice] => 0
            [fprice] => 0,00
            [iCntProducts] => 0
            [dCntItems] => 0
            [aVATs] => Array
                (
                )

            [aBasketContents] => Array
                (
                )

            [giftmessage] => 
            [chosencard] => 
            [oCard] => 
            [aDiscounts] => 
            [dDiscount] => 0
            [aVouchers] => Array
                (
                )

            [dVoucherDiscount] => 0
            [fVoucherDiscount] => 0,00
            [dSkippedDiscount] => 
        )

    [_aRequireCookiesInFncs:protected] => Array
        (
            [register] => 
            [account] => 
            [0] => tobasket
            [1] => login_noredirect
            [2] => tocomparelist
        )

    [_blSidNeeded:protected] => 
    [_aPersistentParams:protected] => Array
        (
            [0] => actshop
            [1] => lang
            [2] => currency
            [3] => language
            [4] => tpllanguage
        )

)

Das kann doch einfach nicht wahr sein!

Hab eine Ursache gefunden.
Alles funktioniert wenn der User eingeloggt ist, ab dem Zeitpunkt können die Daten mit dem Vorschlag von Daniel ausgelesen werden.
Aber wie mach ich das jetzt mit den Shopbesuchern die sich nich einloggen und in dem Shop rumstöbern. :eek:

Gruß Anatolij

[QUOTE=age1981;24788]Hab eine Ursache gefunden.
Alles funktioniert wenn der User eingeloggt ist, ab dem Zeitpunkt können die Daten mit dem Vorschlag von Daniel ausgelesen werden.
Aber wie mach ich das jetzt mit den Shopbesuchern die sich nich einloggen und in dem Shop rumstöbern. :eek:

Gruß Anatolij[/QUOTE]

  1. Vermutung:

Die Session ist noch nicht gestartet:

Trag mal in der config.inc.php zusätzlich folgende Variable ein:

$this->blForceSessionStart = true;

[QUOTE=DanielS;24802]2. Vermutung:

Die Session ist noch nicht gestartet:

Trag mal in der config.inc.php zusätzlich folgende Variable ein:

$this->blForceSessionStart = true;[/QUOTE]

Hallo Daniel,

vielen Dank! Das war die Lösung, jetzt funktioniert es wieder. Jetzt hab ich aber das Problem, dass mein Select bei manchen Angaben zu einer weissen Seite führt.
Ich vermute das SELECT zu viele Daten zurückliefert, da ich explizit nach Variantenartikeln suche…


$oArticle = oxNew("oxarticle");
$oArticleList = oxnew('oxArticleList');
$sTable = getViewName('oxarticles');
 $sSelect = "select " . $sTable. ".* from ". $sTable;
 $sSelect .= " " . $sWhere;
 $sSelect .= " and " .$oArticle->getSqlActiveSnippet();
 $sSelect .= " GROUP BY `OXID`";
 $sSelect .= " LIMIT 0 , 30";

//$sWhere ist dann zum Beispiel... "OXVARSELECT LIKE '%|Bordeaux' "

Wenn ich die Abfrage direkt in der Datenbank absende, dann gibt es nie Probleme, im Shop aber ist es abhängig nach Daten. Wenn ich nach “Größe = 40” suche, dann bekomme ich die weisse Seite, weil ungefähr 500 Artikel zurückgeliefert werden.
Wenn ich nach Farbe Bordeaux suche, dann bekomme ich ganz normal ein Ergebnis.
Schlimme dabei ist, es wird noch nicht mal ne Fehlermeldung protokoliert, weder in der error_log oder sonst noch irgendwo.

Ich vermute das Problem könnte bei der Aufbereitung der Articlelist sein. Ich komm aber einfach nicht auf den Fehler!

In der PHP INI sind alle Voraussetzungen gegeben, der CASHE und die Scrtiptlaufzeit sind auf die empfohlenen Werte gesetzt.

[QUOTE=age1981;24811]Hallo Daniel,

vielen Dank! Das war die Lösung, jetzt funktioniert es wieder. Jetzt hab ich aber das Problem, dass mein Select bei manchen Angaben zu einer weissen Seite führt.
Ich vermute das SELECT zu viele Daten zurückliefert, da ich explizit nach Variantenartikeln suche…


$oArticle = oxNew("oxarticle");
$oArticleList = oxnew('oxArticleList');
$sTable = getViewName('oxarticles');
 $sSelect = "select " . $sTable. ".* from ". $sTable;
 $sSelect .= " " . $sWhere;
 $sSelect .= " and " .$oArticle->getSqlActiveSnippet();
 $sSelect .= " GROUP BY `OXID`";
 $sSelect .= " LIMIT 0 , 30";

//$sWhere ist dann zum Beispiel... "OXVARSELECT LIKE '%|Bordeaux' "

Wenn ich die Abfrage direkt in der Datenbank absende, dann gibt es nie Probleme, im Shop aber ist es abhängig nach Daten. Wenn ich nach “Größe = 40” suche, dann bekomme ich die weisse Seite, weil ungefähr 500 Artikel zurückgeliefert werden.
Wenn ich nach Farbe Bordeaux suche, dann bekomme ich ganz normal ein Ergebnis.
Schlimme dabei ist, es wird noch nicht mal ne Fehlermeldung protokoliert, weder in der error_log oder sonst noch irgendwo.

Ich vermute das Problem könnte bei der Aufbereitung der Articlelist sein. Ich komm aber einfach nicht auf den Fehler!

In der PHP INI sind alle Voraussetzungen gegeben, der CASHE und die Scrtiptlaufzeit sind auf die empfohlenen Werte gesetzt.[/QUOTE]

Kurzer Nachtrag:
Wenn ich versuche das Limit zu setzen, dann hilft das leider auch nicht.
$oArticleList->setSqlLimit( 3, 5 );

[QUOTE=age1981;24819]Kurzer Nachtrag:
Wenn ich versuche das Limit zu setzen, dann hilft das leider auch nicht.
$oArticleList->setSqlLimit( 3, 5 );[/QUOTE]

Eine weiße Seite gibt ja den Hinweis, daß irgendwo eine Exception geworfen wird. Hast Du Einträge in der exception.log?

Produktivmodus abschalten - gestattet, Fehlermeldungen auch auszugeben,
Debugmodus setzen - Shop schreibt (möglicherweise) Exceptions in die LOG-Datei

Das “möglicherweise” konnte ich mir nicht verkneifen, da das Nachvollziehen solcher Fehler auch in der aktuelle 4.2.0 ein Grauen ist. Am zuverlässigsten ist noch immer, in der oxshopcontrol einen eigenen catch-Block zu definieren. Es ist mir bislang ein Rätsel, wieso Oxid das noch nicht mal vernünftig gelöst bekommt.

[QUOTE=DanielS;24861]Das “möglicherweise” konnte ich mir nicht verkneifen, da das Nachvollziehen solcher Fehler auch in der aktuelle 4.2.0 ein Grauen ist. Am zuverlässigsten ist noch immer, in der oxshopcontrol einen eigenen catch-Block zu definieren. Es ist mir bislang ein Rätsel, wieso Oxid das noch nicht mal vernünftig gelöst bekommt.[/QUOTE]
Das Exception-Handling ist ein ziemlich dunkler Fleck auf der sonst ziemlich weißen Weste der Software…

Ich bin ja auch schon seit 9 Monaten (so ca. Tag 2 meines Kontakts mit der OXID-Software) dran, das immer wieder anzumahnen, aber da geschieht einfach nix,

Obwohl das soooo einfach wäre.

Unsereins kann damit leben, weil er sich das mal schnell selbst besser macht.

Aber die vielen frustrierten Shop-Betreiber mit den weißen Seiten, die völlig im Nebel stehen, weil keinerlei Anhaltspunkt über die Ursache vorliegt, sollten Grund genug sein, das sofort zu ändern.

[QUOTE=DanielS;24861]Eine weiße Seite gibt ja den Hinweis, daß irgendwo eine Exception geworfen wird. Hast Du Einträge in der exception.log?

Produktivmodus abschalten - gestattet, Fehlermeldungen auch auszugeben,
Debugmodus setzen - Shop schreibt (möglicherweise) Exceptions in die LOG-Datei

Das “möglicherweise” konnte ich mir nicht verkneifen, da das Nachvollziehen solcher Fehler auch in der aktuelle 4.2.0 ein Grauen ist. Am zuverlässigsten ist noch immer, in der oxshopcontrol einen eigenen catch-Block zu definieren. Es ist mir bislang ein Rätsel, wieso Oxid das noch nicht mal vernünftig gelöst bekommt.[/QUOTE]

Hallo!

Produktivmodus ist deaktiviert, es wird weder eine exception geworfen noch in der exception.log gespeichert.
Was würdet ihr den einbauen um den Fehler zu finden?

[QUOTE=age1981;24876]Hallo!

Produktivmodus ist deaktiviert, es wird weder eine exception geworfen noch in der exception.log gespeichert.
Was würdet ihr den einbauen um den Fehler zu finden?[/QUOTE]

Den folgenden Tip nur zur Fehlersuche, sonst bitte never ever in den originalen Shopdateien drin rumschreiben!!!:

Such Dir in der views/oxshopcontrol.php mal die Abschnitt, wo die Exceptions behandelt werden und bau Dir oberhalb des ersten catch-Blocks noch einen Weiteren dazu:

catch (Exception $oEx) {
dumpvar($oEx);
}

Im Fehlerfall hast Du dann die Exception lesbar vor Dir.

Das reagiert aber auf keinen Produktivmodus etc. Daher zwingend nur in Testinstallationen verwenden!

[QUOTE=DanielS;24885]Den folgenden Tip nur zur Fehlersuche, sonst bitte never ever in den originalen Shopdateien drin rumschreiben!!!:

Such Dir in der views/oxshopcontrol.php mal die Abschnitt, wo die Exceptions behandelt werden und bau Dir oberhalb des ersten catch-Blocks noch einen Weiteren dazu:

catch (Exception $oEx) {
dumpvar($oEx);
}

Im Fehlerfall hast Du dann die Exception lesbar vor Dir.

Das reagiert aber auf keinen Produktivmodus etc. Daher zwingend nur in Testinstallationen verwenden![/QUOTE]
Danke hab es eingebaut in der Sandbox, das System erstellt jetzt ne oxdebugdb.txt aber dort wird der Fehler nicht protokolliert.
Kann ich einen von euch über eine PN anschreiben, damit ich euch die sandbox url sagen kann. Zumindest könnt ihr dann sehen was passiert.

Gruß Anatolij

[QUOTE=age1981;24914]Danke hab es eingebaut in der Sandbox, das System erstellt jetzt ne oxdebugdb.txt aber dort wird der Fehler nicht protokolliert.
Kann ich einen von euch über eine PN anschreiben, damit ich euch die sandbox url sagen kann. Zumindest könnt ihr dann sehen was passiert.

Gruß Anatolij[/QUOTE]

oxdebugdb.txt? Das klingt mir verdächtig nach Datenbank-Debug. Daran glaube ich eher weniger. Aber laß mir ruhig mal die URL zukommen.
Nebenbei: Hast Du mal die oxshopcontrol nach der beschriebenen Art umgebaut?

[QUOTE=DanielS;24917]oxdebugdb.txt? Das klingt mir verdächtig nach Datenbank-Debug. Daran glaube ich eher weniger. Aber laß mir ruhig mal die URL zukommen.
Nebenbei: Hast Du mal die oxshopcontrol nach der beschriebenen Art umgebaut?[/QUOTE]

Hi,

ja hab die start() erweitert, die einzige Funktion mit Try Block


try {
            $this->_process( $sClass, $sFunction );
        } ...
	catch (Exception $oEx) {
		dumpvar($oEx);
	}		

Als Info ich arbeite mit der EE 4.1.6
Muss ich den Block woanders einbauen?:confused:

[QUOTE=age1981;24918]Hi,

ja hab die start() erweitert, die einzige Funktion mit Try Block


try {
            $this->_process( $sClass, $sFunction );
        } ...
	catch (Exception $oEx) {
		dumpvar($oEx);
	}		

Als Info ich arbeite mit der EE 4.1.6
Muss ich den Block woanders einbauen?:confused:[/QUOTE]

Nö, der Block ist auch in der EE dort.

[QUOTE=DanielS;24920]Nö, der Block ist auch in der EE dort.[/QUOTE]
Hi,

welche Zeile ist es denn bei dir in der Datei?

[QUOTE=age1981;24922]Hi,

welche Zeile ist es denn bei dir in der Datei?[/QUOTE]

Welche Funktion soll ich den bearbeiten damit mir die Exceptions angezeigt werden?

Gruß Anatolij

[QUOTE=age1981;25206]Welche Funktion soll ich den bearbeiten damit mir die Exceptions angezeigt werden?

Gruß Anatolij[/QUOTE]

Schau mal in der Funktion “start” In der 4.2.0 ist’s ungefähr in Zeile 78. Den einzufügenden Abschnitt hatte ich schon gepostet.