C# 欧盟通用数据保护条例(GDPR)的Cookies建议(想法)
欧盟通用数据保护条例(GDPR)将于2018年5月25日生效。可以细读。这一次必须全部选择加入,他们将被处以很重的罚款(2000万欧元或全球收入的4%) 由于必须全部选择加入(至少在我们的案例中是这样),我们决定用户接受我们的cookie来接收我们的服务 我们将不会注销当前用户给我们的概念,但是,我们将向他们展示同意页,当他们进入我们的网站之一。如果他们说是,那么我们将保存一个“接受cookie”,否则他们将无法进入我们的网站。之后,每当用户登录到我们的站点时,我们都会检查这个cookie是否存在 我在实现此解决方案时的想法是拦截用户请求,检查是否存在接受cookie,并重定向到请求的资源或控制器(在本例中,我们将asp.net mvc) 我的问题是,我是否可以使用RegisterRoutes将请求路由到控制器,如果是,则重定向到请求的控制器 解决方案呢?不过,解决方案是针对不同方面的。我已将变量名称从language修改为Approve,以使其更有意义(不尝试复制):C# 欧盟通用数据保护条例(GDPR)的Cookies建议(想法),c#,asp.net-mvc,cookies,C#,Asp.net Mvc,Cookies,欧盟通用数据保护条例(GDPR)将于2018年5月25日生效。可以细读。这一次必须全部选择加入,他们将被处以很重的罚款(2000万欧元或全球收入的4%) 由于必须全部选择加入(至少在我们的案例中是这样),我们决定用户接受我们的cookie来接收我们的服务 我们将不会注销当前用户给我们的概念,但是,我们将向他们展示同意页,当他们进入我们的网站之一。如果他们说是,那么我们将保存一个“接受cookie”,否则他们将无法进入我们的网站。之后,每当用户登录到我们的站点时,我们都会检查这个cookie是否存
由于该规则将于2018年5月25日生效,很高兴听到您关于不同类型实施的想法。最后,我想到了我想要的东西——拦截用户请求并基于某个cookie重定向。这可以用作nuget,因为我们有多个应用程序,可以从其中一个应用程序保存cookie。由于它是作为动作过滤器属性创建的,因此可以将其放置在控制器上方:
[MyAcceptCookieCheck]
public class HomeController : Controller
这使得在所有应用程序中都易于实现,保存cookie的操作将从应用程序中的一个位置执行,因此可以方便地进行任何更改,即仅从一个位置进行更改
public class MyAcceptCookieCheck : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var cookies = filterContext.HttpContext.Request.Cookies["OurAcceptCookie"];
var values = filterContext.RouteData.Values.Values;
originalRequest = filterContext.HttpContext.Request.Url.AbsoluteUri;
RouteValueDictionary requestOrigin = new RouteValueDictionary { {
"url", originalRequest } };
if (cookies == null && !values.Contains("CookieConsent")) //so that it won't loop endlessly
{
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
//filterContext.Result = new RedirectResult(urlHelper.Action("CookieConsent", "Home"));
filterContext.Result = new RedirectResult(urlHelper.Action("CookieConsent","Cookie",requestOrigin ,"https","www.my-domain.com/mysitename"));
}
else if(cookies != null)
{
string controllerName = filterContext.RouteData.Values["controller"].ToString();
string actionName = filterContext.RouteData.Values["action"].ToString();
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
filterContext.Result = new RedirectResult(urlHelper.AbsolutePath(actionName, controllerName));
}
}
}
绝对路径()的代码:
现在,我可以将所有请求重定向到cookie同意页面,向用户显示有关正在使用的cookie的所有详细信息,并请求保存“同意cookie”的权限。请您给出一个理由进行否决表决?我会非常乐意把这个问题记下来,而不是记下选民(尽管我考虑过)。你的问题非常广泛,更多的是关于这样做的合法性,而不是一个技术问题。你应该咨询律师,看看这种方法在法律上是否可以接受(如果不能,那么实施它是没有意义的)。@xxbbcc:我同意这是一个广泛的问题,但这也是一个技术问题,即给用户一个选择,要么接受cookies,要么阻止他们使用我们的服务。挑战在于,我们的所有应用程序都应该使用相同的解决方案。这仍然是一个法律问题——将此类协议存储在易失性cookie中是否有效?你应该先咨询律师,了解你的要求,然后才能解决问题。我想我没有写清楚,我们只是要添加一个“acceptCookie”,用于检查是否有人同意使用。这种曲奇除了让我们知道它的使用已经得到了我们的同意之外,没有其他用途。我们不允许使用任何跟踪用户的cookies。
public class MyAcceptCookieCheck : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var cookies = filterContext.HttpContext.Request.Cookies["OurAcceptCookie"];
var values = filterContext.RouteData.Values.Values;
originalRequest = filterContext.HttpContext.Request.Url.AbsoluteUri;
RouteValueDictionary requestOrigin = new RouteValueDictionary { {
"url", originalRequest } };
if (cookies == null && !values.Contains("CookieConsent")) //so that it won't loop endlessly
{
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
//filterContext.Result = new RedirectResult(urlHelper.Action("CookieConsent", "Home"));
filterContext.Result = new RedirectResult(urlHelper.Action("CookieConsent","Cookie",requestOrigin ,"https","www.my-domain.com/mysitename"));
}
else if(cookies != null)
{
string controllerName = filterContext.RouteData.Values["controller"].ToString();
string actionName = filterContext.RouteData.Values["action"].ToString();
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
filterContext.Result = new RedirectResult(urlHelper.AbsolutePath(actionName, controllerName));
}
}
}
public static string AbsolutePath(this UrlHelper url, string actionName, string controllerName, object routeValues = null)
{
string scheme = url.RequestContext.HttpContext.Request.Url.Scheme;
return url.Action(actionName, controllerName, routeValues, scheme);
}