it-swarm.com.de

Joomla-Token mit Ajax-Anforderung

Ich habe ein Modul erstellt, das über eine Ajax-Anfrage einige Daten vom Server anfordert. Es enthält das Joomla-Token zur Validierung der Sitzung.

Es passiert etwas Seltsames - wenn ich Chrome) öffne und die Seite lade, wird das Modul korrekt ausgefüllt und das Formulartoken validiert.

Ich öffne dann Firefox zum Testen, und die Token-Validierung schlägt fehl - aber es wird das gleiche Token verwendet.

Ich war davon ausgegangen, dass der andere Browser eine neue Sitzung in Joomla öffnen und daher ein neues Token erhalten würde.

Warum wird dasselbe Token in zwei verschiedenen Browsersitzungen ausgegeben?

MEHR INFO HINZUFÜGEN:

Der Controller führt die Tokenprüfung folgendermaßen durch:

JSession::checkToken('get') or die( 'Invalid Token');

Die Ansicht erstellt die Ajax-Anforderung unter Verwendung des Tokens als URL-Variable:

index.php?option=com_mycomponent&format=raw&task=ajax.myTask&50e6a74276c578d2ebfc40fd526a193f=1

Das Token wird mithilfe eines Ajax-Aufrufs einer anderen Funktion generiert, die das Token mithilfe von Folgendem generiert:

echo JFactory::getSession()->getFormToken();

Dies ist nicht besonders gut, aber es ist die einzige Möglichkeit, mit der ich versucht habe, das Caching von Joomla zu umgehen. Es besteht die Tendenz, in Ansichten generierte Token zu cachen, wenn Sie sie in Ajax-Anforderungen einbetten müssen. Daher fordern wir sie von einem anderen Service an.

5
user101289

Das klingt zunächst sehr seltsam.

Wenn Sie die Seite in zwei Browsern öffnen, sollte Joomla zwei verschiedene Sitzungs-IDs generieren (überprüfen Sie die von Joomla generierten Cookies, sie sollten unterschiedlich sein!). Dies liegt am Benutzeragenten.

Sobald das Token generiert wurde, wird es grundsätzlich in der Sitzung gespeichert. Wenn Sie das nächste Mal getFormToken () für das Sitzungsobjekt aufrufen, erhalten Sie dasselbe Objekt zurück. Dies zeigt an, dass Joomla dieselbe Sitzung verwendet !? Aber später nicht das gleiche Token zu validieren?

Sie können getFormToken (true) verwenden, um die Generierung eines neuen Tokens zu erzwingen - nur zu Testzwecken.

In Anbetracht der Menge an technischen Details, die Sie uns mitgeteilt haben, sind dies die besten Ideen, über die ich nachdenken kann.

Erwägen Sie, Ihr Modul von einem anderen Computer aus zu testen, Inkognito-Modi in Ihrem Browser zu testen oder ein Beispiel auf github zu veröffentlichen.

Hoffe das hilft.

1
Valentin Despa