欧盟通用数据保护条例(GDPR)将于2018年5月25日生效。人们可以详细阅读here。这一次,它必须全部选择加入并且他们有非常高的罚款(2000万欧元或全球收入的4%!)。
因为,必须全部选择加入(至少在我们的情况下),我们已经决定用户接受我们的cookie来接收我们的服务。
我们不会注销当前用户为我们提供概念,但是,当他们进入我们的某个网站时,我们会向他们提供同意页面。如果他们说是,那么我们将保存 " accept-cookie "否则他们无法进入我们的网站。之后,每当用户登录我们的网站时,我们都会检查此cookie是否存在。
我实现此解决方案的想法是截取用户请求并检查是否存在 accept-cookie ,并在我们的案例中重定向到所请求的资源或控制器会相应地 asp.net mvc 。
我的问题是,我是否可以使用RegisterRoutes将请求路由到控制器,如果是,则重定向到请求的控制器?
this解决方案怎么样?虽然,解决方案是针对不同方面的。我已经修改了语言中的变量名称以同意使其更有意义(而不是尝试复制):
public class EnsureLanguagePreferenceAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var euCookie = filterContext.HttpContext.Request.Cookies["ConsentCookies"];
if (euCookie == null)
{
// cookie doesn't exist, redirect use to a View showing
//all the cookies being saved in client machine
// and to take user consent(accept or deny)
}
// do something with euCookie
base.OnActionExecuting(filterContext);
}
}
当这条规则于2018年5月25日生效时,听到你对不同类型实施的想法会很高兴。
答案 0 :(得分:1)
最后,我想出了一些我想要的东西 - 拦截用户请求并根据某个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));
}
}
}
AbsolutePath代码(courtesy):
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);
}
现在,我可以将所有请求重定向,而无需将该特定cookie发送到Cookie同意页面,并向用户显示有关正在使用的Cookie的所有详细信息,并要求获得保存“ConsentCookie”的权限。