# Plugin - Anzeige nur für eingeloggte User - Problem mit Cache?

**URL:** https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828
**Category:** Programmierung
**Created:** [11. Juli 2017 um 08:50 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828 "2017-07-11T08:50:06Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [11. Juli 2017 um 08:50 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/1 "2017-07-11T08:50:06Z")

</div>

Hallo Community,&nbsp;

ich hatte mir überlegt in einem Plugin die zusätzlichen tpl-Dateien und Bearbeitungen im &nbsp;Frontend nur für eingeloggte Benutzer anzuzeigen. Das ganze kann über die Plugin-Config eingestellt werden.

&nbsp;

Dazu kann ich in meiner Bootstrap.php abfragen, ob ein Benutzer eingeloggt ist:&nbsp;

```
public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
{

    // Hole Variable aus der Config
    $showUsersOnly = $this->Config()->get('usersOnly');

    // Prüfe ob Option false ist oder ob Option true und User eingeloggt. Erst dann übergebe den View und mache, was sonst noch so in onFrontendPostDispatch passiert
    if($showUsersOnly == false || (Shopware()->Modules()->Admin()->sCheckUser() && $showUsersOnly == true)) {

        /** @var \Enlight_Controller_Action $controller */
		$controller = $args->get('subject');
		$view = $controller->View();
		$view->addTemplateDir(
			__DIR__. '/Views'
		);

    }
}

```

Problem:

- Stelle ich die Option auf true in der Plugin-Config und leere den Cache&nbsp;wird das Plugin als ausgeloggter Benutzer korrekterweise nicht angezeigt.
- Logge ich mich mit einem Benutzer ein, wird das Plugin nicht dargestellt, bis ich im Backend NOCHMALS den Cache geleert habe (während ein Nutzer im Frontend eingeloggt ist)
- Danach kann ich mich aus- und wieder einloggen und die Dastellung ist jeweils korrekt.

&nbsp;

Info:

- Testshop lief dazu im Produktivmodus
- In der Entwicklungsumgebung konnte ich dieses Verhalten so nicht feststellen (nicht im Produktivmodus)

&nbsp;

Frage:&nbsp;

1. Woran liegt das?
2. Wäre das mit einer anderen Variante nicht so? Man könnte ja auch mit&nbsp;$args-\>getSubject()-\>View()-\>assign(‚sUserloggedIn‘,&nbsp;Shopware()-\>Modules()-\>Admin()-\>sCheckUser()); dem View eine Variable assignen und dann in den einzelnen tpl-Dateien abfragen.

---

<div class="post-metadata">

### Author: ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)
#### Post date: [11. Juli 2017 um 08:55 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/2 "2017-07-11T08:55:22Z")

</div>

Ja, liegt am cache. In ein widget auslagern und via action-Tag den Bereich einbinden - oder eben betroffene Controler vom Cache ausklammern. Mal im Forum nach suchen, gibt es einiges zu, oder Doku lesen. Besonders ein Thread, wo es um den Namen oben im Account-Button ging.

---

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [11. Juli 2017 um 09:10 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/3 "2017-07-11T09:10:31Z")

</div>

Damit erklärt sich, warum beim Testen mit&nbsp;{if $sUserLoggedIn} in den Topsellern (=&nbsp;Widgets) die Anzeige korrekt und im allgemeinen Listing falsch war.&nbsp;

&nbsp;

Auslagern in Widgets ist schlecht, da das Plugin an vielen Stellen Blöcke des Bare-Themes überschreibt. Im Listing zum Beispiel.

Controller ausklammern sehe ich auch als schwierig… Ich kann doch nicht einfach den Controller für das Listing aus dem Cache ausschließen?

Deinen besagten Beitrag habe ich leider nicht gefunden&nbsp; ![Frown](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/569ff272a6dd35730487f053b5b3cd1f98b23eea.png "Frown")

&nbsp;

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [11. Juli 2017 um 09:19 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/4 "2017-07-11T09:19:56Z")

</div>

Ab einem gewissen Punkt macht der Cache keinen Sinn mehr. Jedes Widget-Tag {action …}, welches in einen Cache-Miss läuft, erzeugt einen eigenen Request. Das kann dazu führen, dass der Cache die Performance der Seite sogar eher verschlechtert. In diesem Fall solltest du dir überlegen

- Brauche ich wirklich den HTTP Cache? Reicht der Produktivmodus (Templatecache) nicht aus? (HTTP-Cache ist in der Regel nur bei sehr viel Besuchern gleichzeitg erforderlich.
- Die dynamischen Stellen beim Nutzer via Ajax zu laden und dann local zu “cachen”. (siehe local/session Storage im Browser)

Viele Grüße

---

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [11. Juli 2017 um 09:40 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/5 "2017-07-11T09:40:53Z")

</div>

Es wäre nur ein Feature gewesen, welches ich in das Plugin noch aufgenommen hätte. Dazu aber den Cache an ca. 5 -10 &nbsp;Stellen aufzubohren, sehe ich dazu nicht ein. Dachte es wäre mit ein paar Abfragen a la&nbsp;{if $sUserLoggedIn} oder global in der Bootstrap-php getan. Und die Entscheidung über den HTTP-Cache kann und werde ich nicht für den Kunden entscheiden.&nbsp;

---

<div class="post-metadata">

### Author: ![IFF](https://avatars.discourse-cdn.com/v4/letter/i/c37758/32.png) [@IFF](https://forum.shopware.com/u/IFF)
#### Post date: [12. Juli 2017 um 12:56 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/6 "2017-07-12T12:56:10Z")

</div>

Kann man nicht einfach im TPL die Session abfragen? Oder wird dieser Zustand auch im Cache verankert?

{$smarty.session.Shopware.sUserId}

Gibt es keinen Rückgabewert ist man natürlich nicht eingeloggt.

---

<div class="post-metadata">

### Author: ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)
#### Post date: [12. Juli 2017 um 13:10 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/7 "2017-07-12T13:10:26Z")

</div>

Ohne zuviel zu versprechen: Der Cache bekommt eine ID - möglich, dass hier der Zustand „angemeldet / nicht angemeldet“ berücksichtigt wird.  
Möglich wäre zumindest hier eine Weiche. Ist „angemeldet“ aber einmal im Cache, wird es nicht mehr neu erzeugt. Also geht 100% nichts mit individuellen User-daten / Aktionen.  
Lies mal hier durch - da haben wird dann irgendwann aufgegeben&nbsp; ![Sticking-out-tongue](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/sticking-out-tongue.png "Sticking-out-tongue")&nbsp;Und simkli ist schon fitt.  
[https://forum.shopware.com/discussion/41317/im-login-button-im-topmenue-soll-statt-mein-konto-nach-login-kundenname-oder-text-stehen](https://forum.shopware.com/discussion/41317/im-login-button-im-topmenue-soll-statt-mein-konto-nach-login-kundenname-oder-text-stehen)

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [12. Juli 2017 um 13:11 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/8 "2017-07-12T13:11:13Z")

</div>

> [@IFF schrieb:](https://forum.shopware.com/profile/26530/IFF "IFF")
> 
> Kann man nicht einfach im TPL die Session abfragen? Oder wird dieser Zustand auch im Cache verankert?

Es geht hier um den HTTP-Cache. (nicht Produktivmodus). [Dieser muss explizit eingeschaltet werden&nbsp;](https://developers.shopware.com/developers-guide/http-cache/#backend)

Dieser Cache macht vereinfacht folgendes: Der Cache wird komplett vor Shopware geschaltet. Er speichert die komplette HTML-Ausgabe\* von Shopware und spielt diese aus\*\*, anstatt Shopware erneut aufzurufen. Daher wird dabei Shopware überhaupt nicht angesprochen (keine Template Engine/Smarty, gar nichts).&nbsp;

Wenn es dich genauer interessiert, wie der HTTP-Cache funktioniert, gibt es hier einen interessanten Artikel:  
[Understanding the Shopware HTTP Cache](https://developers.shopware.com/blog/2015/02/11/understanding-the-shopware-http-cache/)

\* (vereinfacht)&nbsp;ESI Tags sind zu berücksichtigen  
\*\* (vereinfacht) NoCache-Tags&nbsp;sind zu berücksichtigen

Viele Grüße

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [12. Juli 2017 um 13:13 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/9 "2017-07-12T13:13:12Z")

</div>

> [@sonic schrieb:](https://forum.shopware.com/profile/16285/sonic "sonic")  
> Lies mal hier durch - da haben wird dann irgendwann aufgegeben&nbsp; &nbsp;Und simkli ist schon fitt.

&nbsp;Ich musste damals mein komplettes Plugin über den Haufen werfen, als ich erfuhr, dass Shopware sowas mitbringt&nbsp;

&nbsp;

P.S. Umbedingt mal in die 5.3 reinschauen. Da gibt es den SLC (Shopware Login Cookie). Damit wird sowas dann möglich sein. (Es wird dann für jeden Nutzer ein eigener Cache angelegt. Bisher hat sich mir aber noch nicht erschlossen, ob das in High-Peformance Szenarien überhaupt sinnvol ist? &nbsp;Vielleicht sagt SW ja noch etwas dazu)

---

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [12. Juli 2017 um 13:32 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/10 "2017-07-12T13:32:56Z")

</div>

> [@sonic schrieb:](https://forum.shopware.com/profile/16285/sonic "sonic")
> 
> Ohne zuviel zu versprechen: Der Cache bekommt eine ID - möglich, dass hier der Zustand „angemeldet / nicht angemeldet“ berücksichtigt wird.  
> Möglich wäre zumindest hier eine Weiche. Ist „angemeldet“ aber einmal im Cache, wird es nicht mehr neu erzeugt. Also geht 100% nichts mit individuellen User-daten / Aktionen.

Hieße das nun, dass man in den tpl-Dateien doch mit&nbsp;{$smarty.session.Shopware.sUserId} abfragen könnte ob jemand eingeloggt ist? Prinzipiell ist mir egal WER da eingeloggt ist. Ich will nur wissen ob der, der gerade auf der Seite ist, eingeloggt ist und dann das Plugin anzeigen oder eben nicht. &nbsp;

---

<div class="post-metadata">

### Author: ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)
#### Post date: [12. Juli 2017 um 13:36 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/11 "2017-07-12T13:36:50Z")

</div>

Versuch es mal mit

```
{if $sUserLoggedIn}

```

Ich lege meine Hand aber nicht dafür ins Feuer, ob der Cache das auch wirklich zuverlässig trennt.

---

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [12. Juli 2017 um 14:00 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/12 "2017-07-12T14:00:57Z")

</div>

Achso, ne, das habe ich weiter oben schon geschrieben, dass das nicht funktioniert.

Bei den Widgets / Topsellern hat es dann funktioniert aber im Listing nicht. Je nachdem in welchem Conrtoller man das anwendet…&nbsp;

&nbsp;

Dachte {$smarty.session.Shopware.sUserId} wäre etwas anderes als&nbsp;{if $sUserLoggedIn}. Zumal&nbsp;$sUserLoggedIn je nach Controller leer oder voll ist und teilweise auch&nbsp;$userLoggedIn heißt…&nbsp;

---

<div class="post-metadata">

### Author: ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)
#### Post date: [12. Juli 2017 um 14:03 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/13 "2017-07-12T14:03:41Z")

</div>

Kannst ja mit&nbsp;&nbsp;

```
{debug}

```

im template und ohne Popupblocker die aktuellen Vars ausgeben lassen.

---

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [12. Juli 2017 um 14:12 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/14 "2017-07-12T14:12:03Z")

</div>

mache ich mit firephp und dem debug plugin. Daher weiß ich, dass an verschiedenen stellen&nbsp;$sUserLoggedIn auch&nbsp;$userLoggedIn heißt und mal befüllt ist und mal nicht.

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [12. Juli 2017 um 14:15 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/15 "2017-07-12T14:15:03Z")

</div>

Ich kann nur nochmal auf meinen Beitrag von weiter oben verweisen:  
[vor etwa einer Stunde](https://forum.shopware.com/discussion/comment/199287/#Comment_199287)

Dort ist auch ein Link zu einem Beitrag, der den HTTP-Cache erklärt. Dann versteht man, warum das nicht klappt (klappen kann)&nbsp; ![Wink](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/wink.png "Wink")

Viele Grüße

---

<div class="post-metadata">

### Author: ![IFF](https://avatars.discourse-cdn.com/v4/letter/i/c37758/32.png) [@IFF](https://forum.shopware.com/u/IFF)
#### Post date: [12. Juli 2017 um 14:27 UTC](https://forum.shopware.com/t/plugin-anzeige-nur-fur-eingeloggte-user-problem-mit-cache/46828/16 "2017-07-12T14:27:08Z")

</div>

Hab es mal selber eben noch mal getestet. Wenn ich bei den Einstellungen HTTP-Cache frontend/listing lösche, dann gehts auch beim Listing - auch mit $sUserLoggedIn. Sonst, wie bereits erwähnt, natürlich nicht.
