Wir dürfen Cookies nicht einfach so auf die Festplatte einer Leserin schreiben (lassen). Denn die gehört ihr, nicht uns. Für die Cookies, die technisch notwendig sind, hat sie mit dem Abruf unserer Seite zwar konkludent ihr Einverständnis gegeben. Denn sie wollte unseren Blogbeitrag ja lesen. Die anderen Cookies dürfen wir jedoch nur dann auf ihrem Rechner speichern, wenn unsere Leserin es uns explizit erlaubt hat. Und bevor sie das tut, muss sie abfragen können, was die Cookies tun. Dazu dient uns ein sauberer Cookie-Dialog.
Den brauchen wirt nicht selbst zu entwickeln . Denn bootScore liefert uns mit seinem Plugin bsCookie einen konfigurierbaren Dialog auf der Höhe der Zeit:
Lösung
- Lade bsCookie herunter.
- Installiere die Zip-Datei über das Plugin-Management Deines WordPress-Backends.
- Ermittle die Cookies, die Du auf dem Rechner Deiner Leserin installieren willst.((Wir müssen dabei bedenken, dass auch unsere Plugins Cookies ablegen lassen können. Es reicht also nicht, nur nach den entsprechenden JavaScript-Befehlen in unseren eigenen Posts und Pages zu suchen.))
- Ordne jeden dieser Cookies der Gruppe ’necessary’((Cookies, die wir dieser Gruppe zuordnen, werden zuletzt auch ohne explizite Zustimmung auf der Festplatte unserer Leserin abgelegt, eben weil sie technisch notwendig sind. So müssen wir notfalls auch beweisen können, dass diese Cookies tatsächlich technisch notwendig sind.)), ‘advertising’ oder ‘analytics’ zu.
- Ziehe im Dialog ‘Appearance/Widgets’ ein Widget ‘Customer HTML’ in die Widget-Gruppe Footer‑4
- Trage dort die Scriptzeilen ein, wie sie die bsCookie-Dokumentation offeriert.
- Erzeuge für jedes Deiner Plugins in der entsprechenden Sektion einen Eintrag.
- Verlinke Deine Datenschutzseite in den Dialog, indem Du #yourprivacypolicy entsprechend ersetzt.
- Übersetze die Texte in die Sprache Deiner Site (bzw. erzeuge einen zusätzlichen Eintrag gemäß Deiner Mehrsprachigkeitsstrategie)
Hintergrund
Das Schreiben der Cookies über einen Dialog erlauben zu lassen, ist nur die eine Seite der Medaille. Denn Cookies können auch (personen-bezogene) (Wiedererkennungs-) Daten speichern, die auf Serverseite akkumuliert und an externe Stellen weitergereicht werden. Deshalb müssen wir solche Cookies außerdem in unserem Datenschutzkonzept erwähnen. Damit unsere Leserin dies auch direkt aus dem Cookie-Zustimmugsdialog heraus ausrufen kann, bietet der bsCookie-Dialogtext einen Link, dessen Wert #yourprivacypolice wir entsprechend (um)setzen dürfen.
Es ist mittlerweile gute Tradition, Cookies funktionsbezogen zu gruppieren und für die Gruppen als solche zu fragen, ob die ihr zugeordneten Cookies lokal abgelegt werden dürfen. Rechtlich notwendig ist so ein Clustern nicht. Wir könnten unsere Leserin die Nutzung von Cookies auch ganz generell erlauben oder ablehnen lassen.((Eine stärkere Granularität liegt aber in unserem Interesse. Denn möchte eine Leserin das eine nicht — z.B. Advertising -, könnte sie das andere — z.B. Analytics — immer noch erlauben. Damit würden wir wenigstens noch einen Teil dessen erfahren, was wir insgesamt zu erfahren hofften.)) Oder wir könnten jeden einzelnen Cookie an- oder abwählbar machen — und den Dialog damit überfrachten.
Wie dem auch sei: Erstmal müssen wir natürlich wissen, welche Cookies unsere Site schreibt und was diese tatsächlich tun. Welche es sind, können wir uns über die Browser anzeigen lassen. Etwa mittels seines ‘Privacy and Security’-Dialoges. Oder mit Hilfe eines Browser-Plugins((z.B. mit dem Cookie Editor)), das direkt für jede aufgerufene Site/Seite anzeigt, welche Cookies von ihr geschrieben worden sind. Was unsere Cookies tun, müssen wir dagegen gesondert ermitteln.
Haben wir diese Cookies dann funktional sortiert, brauchen wir im bsCookie-Dialog nur noch die entsprechenden Gruppen als Sektionen anzulegen und in diese für jedes zugehörige Cookie einen Eintrag zu erzeugen. Für die drei gängigen Gruppen ’necessary’, ‘advertising’ und ‘analytics’ bringt bsCookie die nötigen Codegruppen immer schon mit. Hier reicht es mithin, die Cookies in und mit den Einzeleinträgen zu beschreiben. Gesetzt, wir wollten die drei Cookies bsNecessaryCookie, bsAdvertisingCookie, und bsAnalizingBCookie gesetzeskonform ablegen lassen, müsste der Code für den bsCookie-Dialog so aussehen:
<script>
// Init
window.addEventListener('load', function () {
// obtain plugin
var cc = initCookieConsent();
// run plugin with your configuration
cc.run({
current_lang: 'de',
autoclear_cookies: true,
page_scripts: true,
languages: {
'de': {
consent_modal: {
title: 'Cookie-Zumstimmung:',
description: 'Wir nutzen Cookies, um Deine Entscheidungen bei zukünftigen Besuche wiederzuverwenden. Wenn Du auf "Alle akzeptieren" klickst, dürfen wir alle Cookies verwenden, die technisch notwendigen und die funktionell hilfreichen. Wenn Du auf "nur notwendige" klickst, untersagst Du uns, die funktionell hilfreichen Cookies zu verwenden. Eine feinere Auswahl bieten Dir unsere expliziten <a data-bs-toggle="modal" href="#bs-cookie-modal">Cookie-Einstellungen</a>.',
primary_btn: {
text: 'alle akzeptieren',
role: 'accept_all'
},
secondary_btn: {
text: 'nur notwendige',
role: 'accept_necessary'
}
},
settings_modal: {
title: 'Cookie-Einstellungen',
save_settings_btn: 'Auswahl sichern',
accept_all_btn: 'alle akzeptieren',
reject_all_btn: 'nur notwendige',
close_btn_label: 'schließen',
cookie_table_headers: [
{ col1: 'Name' },
{ col2: 'Domain' },
{ col3: 'Verfall' },
{ col4: 'Beschreibung' }
],
blocks: [
{
title: 'Cookie-Nutzung',
description:
'Wir verwenden Cookies, um zentrale Funktionen unserer Website bereitzustellen und Dein Leseerlebnis zu verbessern. Du kannst für jede Cookie-Gruppe entscheiden, ob Du sie zulässt oder nicht. Weitere Einzelheiten zu Cookies und anderen sensiblen Daten findest Du in unserem <a href="http://karsten-reincke.de/datenschutz">Datenschutzkonzept</a>.'
}, {
title: 'Notwendige',
description:
'Diese Cookies sind essentiell für unsere Website. Ohne sie würde die Site nicht richtig funktionieren.',
toggle: {
value: 'necessary',
enabled: true,
readonly: true // cookie categories with readonly=true are all treated as "necessary cookies"
},
cookie_table: [
{
col1: 'bs_cookie_settings',
col2: 'bootScore.me',
col3: 'wird gelöscht wenn Deine Session beendet wird',
col4:
'Darin speichert bootScore bzw. das Plugin "bsCookies" Deine Cookie-Einstellungen',
is_regex: false
},
{
col1: 'bsNecessaryCookie',
col2: 'http://karsten-reincke.de/',
col3: 'nach 100 Tagen',
col4: 'Demo-Cookie für "pimp your BootScore"',
is_regex: false
},
]
}, {
title: 'Analytics',
description:
'Diese Art der Cookies erlaubt es uns, Deine Entscheidungen beim nächsten Mal wiederzuverwenden.',
toggle: {
value: 'analytics', // your cookie category
enabled: false,
readonly: false
},
cookie_table: [ // list of all expected cookies
{
col1: 'bsAnalizingCookie',
col2: 'http://karsten-reincke.de/',
col3: 'nach 10 Tagen',
col4: 'Demo-Cookie für "pimp your BootScore"',
is_regex: false
}
]
}, {
title: 'Advertising',
description:
'Solche Cookies vermerken, wie Du unsere Website verwendest, welche Seiten Du besuchts und welche Links Du anklickst. Alle Informationen sind anonymiziert und können nicht benutzt werden, um Dich zu identifizieren.',
toggle: {
value: 'advertising',
enabled: false,
readonly: false
},
cookie_table: [ // list of all expected cookies
{
col1: 'bsAdvertisingCookie',
col2: 'http://karsten-reincke.de/',
col3: '2 Wochen',
col4: 'Demo-Cookie für "pimp your BootScore"',
is_regex: false
}
]
}, {
title: 'Weitere Informationen',
description:
'Bei weiteren Fragen zu unserem Daten-Management, kontaktiere <a href="http://karsten-reincke.de/impressum">uns</a> einfach.',
},
]
}
}
}
});
});
</script>
Die Informationen in den Cookie-Zustimmungsdialogs einzubauen, ist das eine. Seinen Code zu aktivieren, das andere. Den angepassten bs-cookie-settings-JavaScript-Code tragen wir dazu in ein Custom-HTML-Element ein, das wir dem Widget Footer 4 hinzugefügt haben. Prinzipiell könnten wir das Custom-HTML-Element auch in andere Widgets einbetten. bsCookie schlägt Footer 4 vor, weil der JavaScript-Code so eher am Ende einer Seite eingebettet und damit direkt ausgeführt wird. Wie auch immer, der Cookie-Zustimmungsdialog wird dann beim Aufruf all der Seiten angezeigt, deren Templates den Footer 4 verwenden. Das Problem der ‘Deep-Links’((Es reicht nicht aus, nur unsere Einstiegsseite den Zustimmungsdialog anzeigen zu lassen. Denn gelegentlich reichen unsere Leserinnen auch Links auf tiefer eingebettete Seiten herum. Unsere Site muss auch in deisen Fällen erst um Erlaubnis bitten, bevor sie die Cookies ablegt.)) ist also gelöst, wenn jede Seite ein Template verwendet, das den entsprechenden JavaScript-Code enthält.
Blieben uns noch drei letzte Aufgaben:
- Zum ersten werden wir unseren Zustimmungsdialog oft auch sprachlich anpassen wollen. Auch das geht über die ‘Umprogrammierung’ des erwähnten JavaScript-Codes.
- Über das funktionalen Farbkonzept von Bootscore/bootStrap ist der Cookie-Dialog auf ‘Warning’ eingestellt. Wer ihn dennoch anders gestalten will, kann das in ihrer Datei
_bscore_custom.scss
so tun:// design the bsCookie-Dialog
#c-inr {
border-color: darkblue;
border-width: 2px;
border-style: solid;
background-color: #eef;
color: blue($color: #000000);
padding: 5px;
}
#c-p-bn {
border-color: darkblue;
}
#c-s-bn {
border-color: darkblue;
} - Zum dritten müssen wir die Semantik des Cookie-Zustimmungsdialoges implementieren. Wenn wir mehr als nur reden wollen, müssen wir unseren ‘Schreibe-Cookie-JavaScript-Code’ so anlegen, dass er ohne Zustimmung nur die technischen notwendigen Cookies schreibt und dass er ansonsten nur die Cookies aus den Gruppen ablegt, für die eine Zustimmung vorliegt.
Diesen letzten Punkt werde ich in einem gesonderten Post aufgreifen …
Und in welchem Zusammenhang …
… steht das mit unserer Migration zu bootScore? Nun, zuletzt muss die Web-Designerin im Rahmen ihrer Anpassungen auch rechtliche Vorgaben beachten, seien es die der DSGVO, die für eine Cookie-Zustimmung und deren Beachtung oder die zur Erstellungen einer Datenschutzerklärung. In diesen Kontext gehören dann auch die Fragen nach dem Zweck eines Bildverzeichnisses, nach einem adäquaten Impressum oder nach einer hinreichenden Open-Source-Lizenzerfüllung. Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.
Im Übrigen: Männer sind mitgemeint.