> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# DC- (Cookie-Daten)

> Eigene Schlüssel-Wert-Paare im verschlüsselten Design-Cookie ablegen, wieder auslesen und für die Personalisierung des Shops verwenden.

Manche Merkmale sollen den Besucher über die Session hinaus begleiten: die Kundengruppe, die er einmal gewählt hat, oder die Produktwelt, für die er sich interessiert. Dafür legt der Shop ein eigenes Cookie an, in dem Sie beliebige Schlüssel-Wert-Paare ablegen können.

Dieses sogenannte Design-Cookie ist verschlüsselt und komprimiert. Was darin steht, kann der Besucher weder lesen noch verändern.

Wegweiser: [Onsite-Personalisierung](https://dokumentation.websale.de/v8s/marketing-funktionen/onsite-personalisierung.md)

> [!WARNING]
>
> Ohne die Einwilligung des Besuchers wird nichts geschrieben. Liegt für das Design-Cookie keine Zustimmung vor, bleibt `DC-CookieData_set()` wirkungslos, ohne dass eine Fehlermeldung erscheint. Bauen Sie Ihr Template deshalb so, dass es auch ohne die gespeicherten Merkmale sinnvoll aussieht.

## Schreiben und lesen

| Tag | Wirkung |
| - | - |
| `DC-CookieData_set()` | legt ein Schlüssel-Wert-Paar ab |
| `DC-CookieData()` | prüft, ob es einen Wert zu einem Schlüssel gibt, und dient als Schleife über alle Paare |
| `DC-CookieData_get()` | gibt den Wert zu einem Schlüssel aus |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-CookieData_set(kundengruppe,katze)~
~DC-CookieData_set(favoriten,trockenfutter)~

{DC-CookieData(kundengruppe)}
   Ihre Kundengruppe: ~DC-CookieData_get(kundengruppe)~
{/DC-CookieData(kundengruppe)}

{!DC-CookieData(kundengruppe)}
   <a href="...">Sagen Sie uns, wofür Sie sich interessieren</a>
{/!DC-CookieData(kundengruppe)}
```

Ist der Schlüssel schon vorhanden, ersetzt `_set()` den bisherigen Wert. Ist er neu, kommt er hinzu. Ein Schlüssel kann also nie doppelt im Cookie stehen.

> [!WARNING]
>
> Beide Argumente von `_set()` müssen gefüllt sein. Ein leerer Wert löscht den Schlüssel nicht, sondern macht das Tag ungültig. Groß- und Kleinschreibung der Schlüssel spielt keine Rolle: `Kundengruppe` und `kundengruppe` sind derselbe Eintrag.

## Alle Paare durchlaufen

Ohne Parameter ist `DC-CookieData()` ein Schleifen-Tag über alle gespeicherten Paare.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@DC-CookieData()}
   ~DC-CookieData~ = ~DC-CookieData_get()~
{/@DC-CookieData()}
```

Innerhalb der Schleife gibt `~DC-CookieData~` den Schlüssel des aktuellen Eintrags aus und `~DC-CookieData_get()~` dessen Wert. Damit lässt sich der Inhalt des Cookies vollständig auflisten, was beim Entwickeln hilfreich ist.

Auch das Klammern funktioniert innerhalb der Schleife und prüft dann gegen den Schlüssel des aktuellen Eintrags.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@DC-CookieData()}
   {DC-CookieData(kundengruppe)}
      <!-- nur der Durchlauf, dessen Schlüssel "kundengruppe" heißt -->
   {/DC-CookieData(kundengruppe)}
{/@DC-CookieData()}
```

## Einen Wert weiterverwenden

`DC-CookieData_get()` gibt aus, mehr nicht. Soll der Wert in eine Abfrage oder in ein anderes Tag, legen Sie ihn mit `_touchKey()` bereit und holen ihn über die beiden Touched-Tags ab.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-CookieData_touchKey(kundengruppe)~
~DC-FP1_set($DC-CookieData_lastValueTouched$)~

{DC-FP1(katze)}
   <!-- Inhalte für Katzenhalter -->
{/DC-FP1(katze)}
```

| Tag | Liefert |
| - | - |
| `DC-CookieData_touchKey()` | legt Schlüssel und Wert bereit, gibt selbst nichts aus |
| `DC-CookieData_lastKeyTouched` | den bereitgelegten Schlüssel |
| `DC-CookieData_lastValueTouched` | den bereitgelegten Wert |

Referenz: [DC- (Freie Parameter und Session-Parameter)](https://dokumentation.websale.de/v8s/referenz/tags/dc/parameter.md)

## Das Cookie sofort setzen

Der Shop schickt das geänderte Cookie erst mit der nächsten Seite mit. Verlässt der Besucher den Shop direkt nach der Seite, auf der `_set()` stand, wurde nichts gespeichert.

`DC-CookieData_cookieHasChanged` greift genau dann, wenn auf dieser Seite etwas am Cookie geändert wurde. Darin lässt sich das Cookie zusätzlich im Browser setzen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{DC-CookieData_cookieHasChanged}
<script>
   document.cookie = "~DC-CookieData_cookieName~=\"~DC-CookieData_cookieValue~\"; path=/; max-age=31536000; SameSite=Lax; Secure";
</script>
{/DC-CookieData_cookieHasChanged}
```

| Tag | Liefert |
| - | - |
| `DC-CookieData_cookieName` | den Namen des Design-Cookies, `ws_<Shop>_<Sprache>_design_cookie` |
| `DC-CookieData_cookieValue` | den verschlüsselten Inhalt, und als Bereichs-Tag die Prüfung, ob überhaupt einer vorliegt |

> [!WARNING]
>
> Der ausgegebene Wert ist der verschlüsselte Cookie-Inhalt, nicht Ihre Klartextangaben. Er lässt sich nur vom Shop wieder auflösen. Werten Sie ihn deshalb nicht im JavaScript aus.

## Grenzen

| Grenze | Verhalten |
| - | - |
| Länge des Cookie-Inhalts | ab einer gewissen Größe schreibt der Shop eine Warnung ins Protokoll |
| doppelte Länge davon | der gesamte Cookie-Inhalt wird verworfen und ein kritischer Fehler protokolliert |

> [!WARNING]
>
> Der zweite Fall trifft nicht nur den einen zu langen Eintrag, sondern das ganze Cookie: Alle zuvor gespeicherten Merkmale sind dann weg. Legen Sie deshalb kurze Schlüssel und kurze Werte ab, beispielsweise Kürzel statt ausgeschriebener Bezeichnungen, und speichern Sie keine Listen im Cookie.

Das Design-Cookie ist für Merkmale gedacht, nicht für Daten. Alles, was nur innerhalb der Session gelten soll, gehört in einen Session-Parameter `DC-SPX`, und alles, was zum Kundenkonto gehört, in die Kundendaten.

## Die Tags im Überblick

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `DC-CookieData()` | nur in der Schleife | ja | ja | ja |
| `DC-CookieData_set()` | ja | – | – | – |
| `DC-CookieData_get()` | ja | – | – | – |
| `DC-CookieData_touchKey()` | ja | – | – | – |
| `DC-CookieData_lastKeyTouched` | ja | – | – | – |
| `DC-CookieData_lastValueTouched` | ja | – | – | – |
| `DC-CookieData_cookieHasChanged` | – | ja | ja | – |
| `DC-CookieData_cookieName` | ja | – | – | – |
| `DC-CookieData_cookieValue` | ja | ja | ja | – |

Zulässig sind alle Tags auf allen Templates.

## Verwandte Themen

* Wegweiser: [Onsite-Personalisierung](https://dokumentation.websale.de/v8s/marketing-funktionen/onsite-personalisierung.md)
* Materialien: [Verwendete Cookies](https://dokumentation.websale.de/v8s/referenz/verwendete-cookies.md)
* Referenz: [DC- (Freie Parameter und Session-Parameter)](https://dokumentation.websale.de/v8s/referenz/tags/dc/parameter.md)
* Referenz: [CHECK- (URL- und Cookie-Daten)](https://dokumentation.websale.de/v8s/referenz/tags/check.md)


## Related topics

- [CHECK- (URL- und Cookie-Daten)](https://dokumentation.websale.de/v8s/referenz/tags/check.md)
- [DC- (Vergleiche und weitere Tags)](https://dokumentation.websale.de/v8s/referenz/tags/dc/vergleiche.md)
- [Materialien Einwilligung zur Datenverarbeitung](https://dokumentation.websale.de/v8s/materialien/materialien-einwilligung-zur-datenverarbeitung.md)
- [Verwendete Cookies](https://dokumentation.websale.de/v8s/referenz/verwendete-cookies.md)
- [AC- (AgreementCookies)](https://dokumentation.websale.de/v8s/referenz/tags/ac-agreementcookies.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.