2012-03-27 13 views
2

Dieses Problem kam zuerst ins Bewusstsein, da die Bestellhistorie-Seite (*/sales/order/history /) im Frontend nur eine kurze Nachricht enthielt: Sie haben keine Bestellungen aufgegeben.Magento-Kunde/Sitzung funktioniert nicht

Nach einiger Fehlersuche, stellt sich das Problem mit dieser Funktion liegt out:

Mage::getSingleton('customer/session') 

Es spielt keine Sitzung Entität zurückgeben aktuellen Informationen des Kunden mit Ausnahme der Website-ID enthalten, weshalb die Reihenfolge Sammlung eine leere zurück Ergebnis nach dem Filtern auf die Kundennummer.

Es gibt tatsächlich einen Beitrag auf Stack Overflow, der ein ähnliches Problem diskutiert: Customer session is different in different parts of a Magento website . Aber es hat keine gute Erklärung gegeben.

Und was verwirrend ist, dass mit meinem Fall funktioniert die Funktion in einigen Teilen gut, aber nicht in den anderen. Zum Beispiel habe ich in die Katalogproduktlistenvorlage

eingefügt, und es zeigt die Kundennummer nach der Anmeldung an. Aber die gleiche Zeile gibt Null in der Bestellhistorie-Seite zurück.

ich diese Codes in app/code/core/Mage/Kunde/Modell/Session.php

public function getCustomer() 
{ 
    ... 
    $customer = Mage::getModel('customer/customer') 
     ->setWebsiteId(Mage::app()->getStore()->getWebsiteId()); 
    if ($this->getId()) { 
     $customer->load($this->getId()); 
    } 
    $this->setCustomer($customer); 
    return $this->_customer; 
} 

Nach dem Einstellen der Website-ID befindet, lädt es den Kunden Einheit je nach $ this-> getId ().

Warum ist das ID-Attribut der Kundensitzungseinheit nicht immer gültig? Kann jemand sein Wissen bitte teilen? Danke vielmals.

+0

Ist die Seite mit der Bestellungshistorie HTTPS, während die Katalogseite HTTP? Es ist möglich, dass die Sitzung zwischen den beiden nicht ordnungsgemäß durchgeführt wird. – nachito

+0

Nein, sie verwenden alle HTTP. Die Anfragen an diese Seiten sind identisch mit den angeforderten URLs und Referrers. – vicch

+0

In der Tat auf/sales/order/history/page wird der Kunde nicht wie eingeloggt "behandelt". Es wird auch nicht der Link "Abmelden" angezeigt. Was könnte das Problem sein, wenn der Kunde auf einigen Seiten als nicht eingeloggt betrachtet wird? – vicch

Antwort

1

Ich würde mit Magento vorsichtig sein, wenn ich annahm, dass das Problem in einem bestimmten Bereich liegt. Sie können ein ziemlich tiefes Kaninchenloch hinunter gehen, bevor Sie feststellen, dass Sie von vorne anfangen müssen.

Wenn Sie genau sind, dass das Problem mit dem Session-Getter liegt, versuchen Sie dies:

Mage::getSingleton('core/session', array('name' => 'frontend')); 

Aber ich würde halten auch nach anderen Möglichkeiten suchen. Klingt ähnlich wie die Probleme, die viele Leute mit Caching haben. Stellen Sie sich vor, Sie möchten dasselbe mit deaktiviertem Caching versuchen. Der Cache für vollständige Seiten kann für variable Werte unerwartete Dinge tun.

Von welcher Datei wird in Ihrem Beispiel geantwortet? Ich muss das wissen, bevor ich weiterhelfen kann.

+0

Ich denke, das Problem kommt von dem Dispatching-Prozess, der in benutzerdefinierten Modulen neu geschrieben wurde. Müssen mehr Anstrengungen unternehmen, um die Dinge klarzustellen. – vicch

1

Wenn Sie Google Chrome verwenden, können Sie mit der rechten Maustaste auf die Seite, wählen Inspect Element, dann Ressourcen Registerkarte, suchen Sie nach Plätzchen auf der linken Seite des Menüs, und klicken Sie auf Ihren Domain-Namen .

Unter dem Domain-Namen werden die Cookies angezeigt, die für ihn eingestellt wurden, zusammen mit Pfad, Ablauf usw. Sehr nützlich.

In Ihrem Fall suchen Sie nach dem 'Frontend' Sitzungscookie unter 'Name'. Sie können sie löschen und die Seite aktualisieren, um zu sehen, ob Magento sie neu erstellt. In diesem Fall funktionieren Sitzungen problemlos.Hoffe, dass hilft :)

PS: Magento verwendet Sitzungen sehr stark, wenn sie gebrochen sind, werden andere Dinge auch die ganze Show brechen.

+0

In meinem Fall gab es 2 adminhtml Werte, die genau gleich waren, aber ich denke, das System wurde verwirrt. Auf jeden Fall hat mir dieser Kommentar viel Kopfschmerzen erspart. – DWils

+0

@ DWils, wenn Sie genau hinsehen, haben Sie wahrscheinlich einen Cookie für 'domain.com' und einen anderen für' .domain.com'. Dies ermöglicht Cookies für die Domain und alle Subdomains, sicher und unsicher. Sie können dies in ** System> Config> [Allgemein]> Web> Session-Cookie-Verwaltung ** ausschalten. Löschen Sie die Felder ** Cookie-Pfad ** und ** Cookie-Domäne **. – Jongosi

0

Ich werde diese Antwort auf einige dieser Fragen Mage sprengen, weil niemand erwähnt, dass die Cookies falsch eingerichtet werden könnten. Wir haben einen Morgen damit verschwendet, nachdem wir ein DB-Update mit der falschen Cookie-Domäne importiert haben.

Stellen Sie sicher, core_config_data Tabelle die richtige Einstellung für diesen Pfad Wert hat:

web/cookie/cookie_domain 

Die Domain sollte dem entsprechen, was Sie in der URL haben.

https://www.myawesomemagentosite.com

web/cookie/cookie_domain = .myawesomemagentosite.com 
1

Es ist interessant, warum wird der Benutzer nicht auf die Anmeldeseite (Kunde/Konto/Login /), wenn die Kundensitzung leer weitergeleitet ist und Sie die Geschichte Seite besuchen. Bitte überprüfe, ob Mage_Customer oder Mage_Sales angepasst wurden.

Wenn es neu geschrieben wurde, wäre dies der erste Ort zu überprüfen.

Verwandte Themen