# Plugin Cache - Client IP

**URL:** <https://forum.shopware.com/t/plugin-cache-client-ip/54667>\
**Category:** Programmierung\
**Created:** [17. August 2018 um 11:36 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667 "2018-08-17T11:36:46Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![shopwarefortune](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@shopwarefortune](https://forum.shopware.com/u/shopwarefortune)\
**Post date:** [17. August 2018 um 11:36 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/1 "2018-08-17T11:36:46Z")

</div>

Ich hab ein Plugin entwickelt, das die Client-IP abfragt und anhand von dieser eine Datenbankabfrage startet. Ich greif über den Wert&nbsp;$\_SERVER[‚REMOTE\_ADDR‘] auf die IP zu. Das ganze mach ich im RouteSoubscriber nach dem Event ‚Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend‘.

Im Live-System habe ich festgestellt, dass die Client-IP gecacht wird und letztenendlich alle Anfragen mit der gleichen IP erscheinen.

&nbsp;

Gibt es eine Möglichkeit den Cache für dieses Plugin zu deaktivieren oder eine andere Möglichkeit auf die IP jedes Requests zuzugreifen ohne Caching?

In einem anderem Post hier im Forum hab ich die Möglichkeit gesehen, mit&nbsp;Enlight\_Controller\_Request\_Request :: getClientIp() auf die IP zuzugreifen, aber darauf bekomm ich kein Zugriff.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. August 2018 um 12:00 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/2 "2018-08-17T12:00:27Z")

</div>

Vielleicht über Request()-\>getClientIp()

---

<div class="post-metadata">

**Author:** ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)\
**Post date:** [17. August 2018 um 12:04 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/3 "2018-08-17T12:04:24Z")

</div>

Btw. ist auch&nbsp;$\_SERVER[‘REMOTE\_ADDR’]&nbsp; kein verlässicher Indikator für die IP des Besuchers. Wenn der einen Proxy nutzt (Varnish, SSL-Proxy, Loadbalancer, …). Dann ist die IP-Adresse in&nbsp;X-FORWARDED-FOR:&nbsp;[X-Forwarded-For – Wikipedia](https://de.wikipedia.org/wiki/X-Forwarded-For)

In&nbsp;$\_SERVER[‘REMOTE\_ADDR’]&nbsp; steht dann die IP des Proxies.

&nbsp;

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. August 2018 um 12:32 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/4 "2018-08-17T12:32:12Z")

</div>

> kein verlässicher Indikator

Jetzt bin ich etwas neugierg geworden.&nbsp;

HTTP\_X\_FORWARDED\_FOR steht nicht immer zur Verfügung. Benutzt jemand z.B. einen Tor Browser so steht dieser Wert nicht zur Verfügung. Und für Firefox gibt es eine Erweiterung, der diesen Eintrag vortäuscht. Da fahre ich doch mit REMOTE\_ADDR oder HTTP\_X\_REAL\_IP besser?

---

<div class="post-metadata">

**Author:** ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)\
**Post date:** [17. August 2018 um 12:36 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/5 "2018-08-17T12:36:24Z")

</div>

> [@R4M schrieb:](https://forum.shopware.com/profile/17170/R4M "R4M")
> 
> > kein verlässicher Indikator
> 
> Jetzt bin ich etwas neugierg geworden.&nbsp;
> 
> HTTP\_X\_FORWARDED\_FOR steht nicht immer zur Verfügung. Benutzt jemand z.B. einen Tor Browser so steht dieser Wert nicht zur Verfügung. Und für Firefox gibt es eine Erweiterung, der diesen Eintrag vortäuscht. Da fahre ich doch mit REMOTE\_ADDR oder HTTP\_X\_REAL\_IP besser?

Naja, wie gesagt steht in REMOTE\_ADDR bei einem Proxy in der Regel die IP des Proxies und nicht die des Besuchers. Damit Shopware die IP des Benutzers hinter einem Proxy noch tracken kann, muss man i.d.R. die trustedProxies konfigurieren - wenn das in der config.php eingerichtet ist, wertet Shopware die x-Header aus.

> **[Shopware HTTP cache](https://developers.shopware.com/developers-guide/http-cache/#cluster-environments)**
>
> Shopware HTTP cache

Quasi „Wenn in der REMOTE\_ADDR die IP des trustedProxies steht, dann werte X-FORWARDED-FOR aus, sonst ignoriere das“.

Das ist ja Standard vorgehen bei Symfony:&nbsp;[How to Configure Symfony to Work behind a Load Balancer or a Reverse Proxy (Symfony Docs)](https://symfony.com/doc/current/deployment/proxies.html)

Insofern muss einem nur bewusst sein, dass in REMOTE\_ADDR eben nicht immer die IP des Clients steht, sondern auch häufig die IP des Proxies.&nbsp;  
Das hat mit dem Client nicht viel zu tun, da das X-FORWARDED-FOR vom Proxy gesetzt wird.

---

<div class="post-metadata">

**Author:** ![BestShopPossible](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@BestShopPossible](https://forum.shopware.com/u/BestShopPossible)\
**Post date:** [17. August 2018 um 12:47 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/6 "2018-08-17T12:47:28Z")

</div>

Also ich würde auch auf real-ip setzen. Problem in Shopware ist hier jedoch, das getClientIP() immer nur

```
return $this->getServer('REMOTE_ADDR'); 

```

zurückschmeißt.

Das ist auch alles nicht Hookable oder sonst irgendwie gut anzufassen und um Proxy-Checks zu erweitern. Habe da auf jeden Fall direkt mal keinen Ansatz gesehen bei welchem man das zufriedenstellend hinbiegen kann.

Ich würde einen check auf real-ip machen wenn das leer ist, dann als fallback die getClientIp aufrufen und den Wert nehmen.&nbsp;

Also ganz banal und wie eigentlich nicht empfohlen eiskalt auf&nbsp;

```
$_SERVER['HTTP_X_REAL_IP'];

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![shopwarefortune](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@shopwarefortune](https://forum.shopware.com/u/shopwarefortune)\
**Post date:** [17. August 2018 um 13:55 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/7 "2018-08-17T13:55:21Z")

</div>

Danke für alle Kommentare bisher.

> [@R4M schrieb:](https://forum.shopware.com/profile/17170/R4M "R4M")
> 
> Vielleicht über Request()-\>getClientIp()

Danke für den Hinweis. Leider gibts die Funktion nicht - Fehlermeldung: „Call to undefined function MyPlugin\Subscriber\Request()“. Oder muss ich diese erst importieren?

&nbsp;

Bzgl. der verschiedenen Methoden wie ich auf dei IP zugreife: das Problem ist nicht eine IP zu erhalte. Das will ich an der Stelle erst mal vernachlässigen.

Das Problem ist:&nbsp;

- User A mit IP 1.1.1.1 greift zu und seine IP wird richtig erkannt.
- Danach greift User B mit IP 2.2.2.2 zu, das Plugin gibt aber als IP 1.1.1.1 - vom User A aus.

Wie kann ich an der Stelle das Caching umgehen oder einen aktuellen Wert erhalten?

---

<div class="post-metadata">

**Author:** ![msslovi0](https://avatars.discourse-cdn.com/v4/letter/m/b2d939/32.png) [@msslovi0](https://forum.shopware.com/u/msslovi0)\
**Post date:** [17. August 2018 um 14:28 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/8 "2018-08-17T14:28:38Z")

</div>

Ich häng mich hier mal mit drauf, ich hab nämlich ganz ähnliche Probleme nur für einen anderen Anwendungsfall und bisher hatte niemand eine Lösung…

[https://forum.shopware.com/discussion/comment/221814/](https://forum.shopware.com/discussion/comment/221814/)

Wenn du es aber nur an einer einzigen Stelle brauchst ist evtl. ein ESI-Tag für dich die Lösung. Für mich ist er es nicht…

Matt

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. August 2018 um 17:54 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/9 "2018-08-17T17:54:33Z")

</div>

> Danke für den Hinweis. Leider gibts die Funktion nicht - Fehlermeldung: „Call to undefined function MyPlugin\Subscriber\Request()“. Oder muss ich diese erst importieren?

Ich weis nicht wie dein Plugin aufgebaut ist und an welcher Stelle du das Request benötigst. Das muss natürlich angepasst werden. Daher hier nur ein Beispiel (ungetestet):&nbsp;

```
public static function getSubscribedEvents() {
  $events = Array(
   'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'onFrontendPostDispatch'
  );
  return $events;
}

public function onFrontendPostDispatch(\Enlight_Event_EventArgs $arguments) {
  $controller = $arguments->getSubject();
  $request = $controller->Request();
  $ip = $request->getClientIp();
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![shopwarefortune](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@shopwarefortune](https://forum.shopware.com/u/shopwarefortune)\
**Post date:** [19. August 2018 um 21:24 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/10 "2018-08-19T21:24:24Z")

</div>

> [@msslovi0 schrieb:](https://forum.shopware.com/profile/20419/msslovi0 "msslovi0")
> 
> Wenn du es aber nur an einer einzigen Stelle brauchst ist evtl. ein ESI-Tag für dich die Lösung. Für mich ist er es nicht…

Danke für den Hinweis, das löst das Problem!

&nbsp;

@R4M - der Wert aus&nbsp;$request-\>getClientIp() wird leider genauso gecached. Danke trotzdem für das Snippet.

---

<div class="post-metadata">

**Author:** ![h\_lohaus](https://avatars.discourse-cdn.com/v4/letter/h/a587f6/32.png) [@h\_lohaus](https://forum.shopware.com/u/h_lohaus)\
**Post date:** [20. August 2018 um 11:40 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/11 "2018-08-20T11:40:29Z")

</div>

Hi,

die Startseite etc. wird in Shopware mit dem HttpCache gecached.

Du könntest den HttpCache deaktivieren, ein ActionTag nutzen oder refreshStatistics nutzen (dieser Aufruf wird nämlich nicht gecached)

> **[Understanding the Shopware HTTP Cache](https://developers.shopware.com/blog/2015/02/11/understanding-the-shopware-http-cache/#search-results)**
>
> The Shopware HTTP cache is available for production since shopware 4.1.0. It allows you to cache responses of the shop system,
> so that the next time the sa

[https://developers.shopware.com/developers-guide/http-cache/#search-results](https://developers.shopware.com/developers-guide/http-cache/#search-results)

Gruß Heiner

---

<div class="post-metadata">

**Author:** ![shopwarefortune](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@shopwarefortune](https://forum.shopware.com/u/shopwarefortune)\
**Post date:** [21. August 2018 um 07:13 UTC](https://forum.shopware.com/t/plugin-cache-client-ip/54667/12 "2018-08-21T07:13:36Z")

</div>

> [@h\_lohaus schrieb:](https://forum.shopware.com/profile/27157/h_lohaus "h\_lohaus")
> 
> Hi,
> 
> die Startseite etc. wird in Shopware mit dem HttpCache gecached.
> 
> Du könntest den HttpCache deaktivieren, ein ActionTag nutzen oder refreshStatistics nutzen (dieser Aufruf wird nämlich nicht gecached)
> 
> [https://developers.shopware.com/blog/2015/02/11/understanding-the-shopware-http-cache/#search-results](https://developers.shopware.com/blog/2015/02/11/understanding-the-shopware-http-cache/#search-results)
> 
> [https://developers.shopware.com/developers-guide/http-cache/#search-results](https://developers.shopware.com/developers-guide/http-cache/#search-results)
> 
> Gruß Heiner

Aktuell haben wir es mit Action Tags gelöst. Was genau ist refreshStatistics?&nbsp;Dazu finde ich keine Doku - auch nicht in den Links, oder hab ich was übersehen?
