jyxon/gdpr-cookie-compliance

一个符合GDPR法律规定的库。

1.2.0 2022-02-10 17:50 UTC

This package is auto-updated.

Last update: 2024-09-10 23:30:18 UTC


README

Donate License: MIT

GDPR Cookie Compliance包

新的GDPR法律为cookie的行为带来了一些变化。此包提供了一个简单的实现,可用于符合这些新规定。此法律针对可用于识别访客的cookie。通过cookie进行的这种识别现在被视为个人信息,因此需要额外的注意和同意。您的网站访客需要围绕cookie具备以下两个能力

  • 明确接受cookie,这意味着他们必须opt-in以使用可能识别他们的cookie。
  • 有简单的opt-out选项来撤回他们的同意。

内容

为了符合此法律,此包在简单实现中添加了以下功能。

  • 设置cookie的作用域,以便只有跟踪cookie可以关闭,或者甚至可以过滤到特定服务。
  • 添加一个cookie栏,只在第一次访问时自动展开。
  • 向网站添加一个cookie设置按钮,以编辑首选项。
  • 提供预先编写的逻辑,以便轻松获取和设置cookie,但只能在JavaScript和PHP中使用同意。

安装

使用以下命令通过composer将包添加到您的项目中

composer require jyxon/gdpr-cookie-compliance

实现

配置

配置有两个主要组件。

作用域

作用域是cookie可以设置的不同区域。例如,您可以有功能cookie和分析cookie。作用域条目如下所示

{
    "scope": "functional",
    "required": 1,
    "title": "Functional cookies",
    "description": "These are the cookies we set purely for functionalities in our websites. We can not track you in any way by settings these. For example if we didn't set a cookie that stored these settings, we wouldn't be able to not constantly prompt you with this screen."
}

第一个参数作用域,是您将在整个代码中使用以标识cookie类型的名称。这应该是一个字符串。第二个参数required,是一个标志,用于确定cookie是否对于正常操作是必要的。这应该是一个整数(可以是10)。第三个参数title,是显示在设置中给用户的cookie标题。这应该是一个字符串。第四个参数description,是cookie的描述,也显示给用户。

可以根据需要添加并使用此文件中的所有作用域。

消息

消息是一组预定义的键/值字符串,用于显示某些消息或弹出/设置按钮中的标题。键应保持不变,但值可以根据您的喜好进行调整。

{
    "required_help": "These cookies can not be unset during your visit to this website, because this would result in degraded performance.",
    "settings_button": "Cookie Settings",
    "cookiebar_title": "Change your cookie settings.",
    "cookiebar_button": "Accept Settings",
    "cookiebar_description": "To comply with new regulations regarding GDPR we are now obligated by law to provide you with settings surrounding cookies. We have not set any cookies that would be able to track you. If you wish to change these settings later on, we will provide you with a button in order to do so."
}

required_help = 当您悬停在必需的复选框上时显示的气球。settings_button = 右下角按钮的标题(具有默认样式)。cookiebar_title = cookie栏本身的标题。cookiebar_button = 保存设置按钮的标题。cookiebar_description = 在标题下显示在cookie栏上的描述。

前端(JS)

此包为JavaScript提供了三个小型包和一些额外的样式。

cookie_tool.js

cookie_tool有三个基本的cookie功能。要初始化此工具,将cookie_tool.js文件加载到您的HTML中(根据您的项目,您可能需要将文件移动到您的pub文件夹)。要创建一个实例,只需编写以下代码。下面还定义了在此工具中公开哪些函数。

var cookieTool = cookie_tool();

// Creates a cookie.
cookieTool.setCookie(name, value, expiration, path = "/");

// Retrieves the value of the cookie.
cookieTool.getCookie(name);

// Deletes the cookie.
cookieTool.deleteCookie(name, path = "/");

gdpr_compliance.js

此文件包含cookie栏的逻辑。它应将cookie栏和设置按钮添加到您的DOM中(在body的末尾之前)。要使此工具正常工作,您还需要将config.json(或您自己的)文件的内容公开给函数。

要初始化此工具,请写下以下代码

var cookieTool = cookie_tool();
var configuration = /**contents of your config.json here*/;
var gdprCompliance = gdpr_compliance(configuration, cookieTool);
gdprCompliance.init();

gdpr_cookie.js

对于一些项目,可能需要通过JavaScript设置和获取cookie。这正是此工具发挥作用的地方。要初始化此工具,请使用以下代码

var cookieTool = cookie_tool();
var configuration = /**contents of your config.json here*/;
var gdprCompliance = gdpr_compliance(configuration, cookieTool);
gdprCompliance.init();
var gdprCookie = gdpr_cookie(gdprCompliance, cookieTool);

gdpr_cookie工具以几乎与cookie_tool相同的方式公开了setCookiegetCookie函数,但现在这些函数都包含在同意检查中。它还实现了deleteCookie函数,因此您无需总是在工具之间切换。

gdpr_cookie_bar.css

此工具还附带了一个样式表,只需将其包含在您的HTML中,它至少看起来不错。

后端(PHP)

要为后端(仅PHP)使用此包,请使用以下库。

设置

在设置cookie之前,应用程序应知道允许什么和不允许什么。要加载Settings,请编写以下代码。

use Jyxon\GdprCookieCompliance\Cookie\Settings;

//This will default to the config.json provided with the package.
$settings = new Settings();

可以通过给__construct一个路径(字符串)作为参数来更改设置文件。如下所示

$settings = new Settings('/some/path/on/my/server/config.json');

管理器

为了设置cookie,需要使用ManagerManager依赖于Settings。要初始化Manager,请编写以下代码

use Jyxon\GdprCookieCompliance\Cookie\Settings;
use Jyxon\GdprCookieCompliance\Cookie\Manager;

$settings = new Settings();
$manager = new Manager($settings);

然后可以使用Manager替换您的标准setcookie函数,并添加一个额外的参数:scope。以下是一个示例

//old
setcookie('functional_cookie_name', 'some-non-tracking-value', time() + 3600, '/', '*.mydomain', 1);
setcookie('tracking_cookie_name', 'uniquely-identifiable-information', time() + 360000, '/', '*.mydomain', 1);

//new
$manager->setCookie('functional', 'functional_cookie_name', 'some-non-tracking-value', time() + 3600, '/', '*.mydomain.com', 1);
$manager->setCookie('analytical', 'tracking_cookie_name', 'uniquely-identifiable-information', time() + 360000, '/', '*.mydomain.com', 1);

仅添加了第一个变量,这是cookie存在的scope。管理器公开以下函数

/**
 * Checks wether there is consent for setting a cookie.
 *
 * @param string $scope
 *
 * @return bool
 */
public function canSet(string $scope): bool;

/**
 * Send a cookie if there is consent. Also deletes cookies for which is no longer consent.
 *
 * @param string $scope
 * @param string $name
 * @param string $value
 * @param integer $expire
 * @param string $path
 * @param string $domain
 * @param boolean $secure
 * @param boolean $httponly
 *
 * @return bool
 */
public function setCookie(string $scope, string $name, string $value = "", int $expire = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false): bool;

/**
 * Fetch a cookie if there is consent. Also deletes cookies for which is no longer consent.
 *
 * @param  string  $scope
 * @param  string  $name
 * @param  string  $path
 * @param  string  $domain
 * @param  boolean $secure
 * @param  boolean $httponly
 *
 * @return mixed
 */
public function getCookie(string $scope, string $name, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false);

反馈

我们希望得到一些关于此包的反馈。您可以在GitHub上创建一个问题。

捐赠

如果此包对您有所帮助,请考虑捐赠

MIT许可

版权所有 2018 Jyxon

特此免费授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的任何人(以下简称“个人”)在本软件上不受限制地处理的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许获得软件的个人如此行事的权利,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任(无论因合同、侵权或其他原因而引起)承担责任,无论是由于软件或其使用或其它方式与软件有关。