Shopware()->Session()->offsetSet('eigene Variable', $Inhalt) Session wird nicht korrekt gelesen.

Hallo Shopwarefreunde,

 

ich benoetige das Speichern eines Arrays in einer Session. Ich nutze diese Funktion: 

Shopware()->Session()->offsetSet('myVariable', $myArray);

Klappt soweit. Ich fange die SessionId folgendermaßen ab:

Shopware()->Session->get('sessionId');

Funktioniert auch. Ich will vergleichen, ob die SessionID auch der ID entspricht, die ich in meinem Array speichere.

Leider ist mir aufgefallen, dass Werte zwar zügig in der Datenbank gespeichert werden, aber nie der aktuellste Wert abgeholt wird. Dazu benutze ich folgenden Befehl:

Shopware()->Session()->get('myVariable')

Mir ist sogar aufgefallen, dass mir auf verschiedenen Browsern (und sogar außerhalb des WLANnetzes) die SessionID ueberall gleich ist. Die hole ich so ab, wie oben erwähnt.
Wahrscheinlich nutze ich nicht den richtigen get-Befehl? Ich finde zu diesem Thema leider nix. Auch den offset-Befehl hab ich nach 15min Recherche irgendwo im Forum gefunden.

Mein Frage ist: Was mache ich falsch?

Vielen Dank

Marcel

PS Sorry, bin etwas uebernaechtigt^^’

Shopware() solltest du ohnehin nicht mehr nutzen - besser den Container.

Da müsste es dann sowas geben: $this->container->get(‘session’)->offsetSet(‘variblenname’, $variable);

Als pendent dazu gibt es dann “offsetGet”.
 

Danke für die Antwort.

Ich habe rausgefunden, dass doch eine neue SessionID pro neuem geoeffneten Browser erzeugt wird. ABER: Sobald ich im Frontend meinen Befehl ausfuehre, der via Ajax im Controller mein oben erwaehntes Array in der Session speichert (und versucht aufzurufen) wird ploetzlich die alte SessionID geladen, und zwar die, die irgendwann mal mit meinem OffsetSet() Befehl gespeichert wurde. 

 

Bist du zufällig in Produktiv Modus?

@Shyim schrieb:

Bist du zufällig in Produktiv Modus?
 

Ja 

@Shyim schrieb:

Bist du zufällig in Produktiv Modus?

Hast du dafuer eine Loesung? Ich hab rausgefunden, dass es tatsaechlich am Produktivmodus liegt! Dass sich die Sessions „browserweit“  aufriefen lag an etwas Anderem. 
Aber im Produktivmodus bleibt die Session tatsaechlich haengen. 
Der Logout z.B. funktioniert ja auch, sodass Kunden ausgeloggt sind und Artikel aus dem Warenkorb verschwinden.

Danke!

@Shyim schrieb:

Bist du zufällig in Produktiv Modus?

Ok, bisher habe ich folgendes rausgefunden:
Wenn ich in meiner Funktion noch folgende Methoden aufrufe:

 $cacheManager = Shopware()-\>Container()-\>get('shopware.cache\_manager'); $cacheManager-\>clearHttpCache(); 

dann ist das Problem beseitigt. Jetzt braeuchte ich noch „die beste“ Methode, um nicht zu viel aus dem Cache zu loeschen. Eigentlich soll ja nur mein Array aus dem Cache verschwinden. Hat dafuer jemand noch eine Loesung?

 

In Gastsessions tritt das Problem auch weiterhin auf. Dort spielt der Modus scheinbar auch keine Rolle. Auch im Bearbeitungsmodus teilen sich X Browser die selbe Session

also ich würde jetzt einfach mal vermuten das er auf ip prüft und du deshalb auf allen browsern die gleiche session ID bekommst… 100% kann ich es nicht sagen.

Hi,

ich muss dieses alte Thema hier nochmal hochholen den ich stehe vor dem gleichen Problem. Das was @shyim hier ja auch shcon erwähnt hat ist bei mir eindeutig die Ursache. Kurz beschrieben:
Wenn ich per Plugin im PreDispatch event zB die sCountry Variable der Session setze wird diese ium aktuellen Request nicht verwendet. Das sieht man eindeutig wenn man zB eine preiusanpassung für ein betsimmtes Land vornimmt, dann den wert in der Session im predispatch ändert lädt er nicht den neuen Preis. Aktualisiere ich dann diese Seite einmal wird der richtige Preis gewählt.
Auch auffällig ist das bei allen Artikeln die per JS nachgeladen werden zB der Topsellerslider oder Inhalte der Einlkaufswltelten die Preise richtiug sind nur bei den direkt im code vorhandenen nicht.
Da ich mit einem cachecookie arbeite funktioniert das grundsätzlich nachweislich.
Meine umareitung war also per js nen abstecher auf eine andere seite zu machen und dnach direkt wieder zurückzuleiten. Somit werden mir dann auch nach änderung die korrekten Preise ausgegeben.
Mein Problem sind nun aber bots etc welche eben nicht interaktiv etwas wählen und wleche ich nicht redirecten möchte.
Mein Ansatz war eben das ich vielleicht auf einem Event hänge der zu spät ausgeführt wird. Also sozusagen nachdem er bereits die Preise generiert hat.

Gibt es ein Event welchen ich wählen könnte der früher gefeuert wird?
Anders: welcher Event wäre der richtige Event um session variablen im aktuellen request zu manipulieren sodas sich die änderung direkt auf diesen Request auswirkt?

Viele Grüße
Lars Lorenz