Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 欧盟通用数据保护条例(GDPR)的Cookies建议(想法)_C#_Asp.net Mvc_Cookies - Fatal编程技术网

C# 欧盟通用数据保护条例(GDPR)的Cookies建议(想法)

C# 欧盟通用数据保护条例(GDPR)的Cookies建议(想法),c#,asp.net-mvc,cookies,C#,Asp.net Mvc,Cookies,欧盟通用数据保护条例(GDPR)将于2018年5月25日生效。可以细读。这一次必须全部选择加入,他们将被处以很重的罚款(2000万欧元或全球收入的4%) 由于必须全部选择加入(至少在我们的案例中是这样),我们决定用户接受我们的cookie来接收我们的服务 我们将不会注销当前用户给我们的概念,但是,我们将向他们展示同意页,当他们进入我们的网站之一。如果他们说是,那么我们将保存一个“接受cookie”,否则他们将无法进入我们的网站。之后,每当用户登录到我们的站点时,我们都会检查这个cookie是否存

欧盟通用数据保护条例(GDPR)将于2018年5月25日生效。可以细读。这一次必须全部选择加入,他们将被处以很重的罚款(2000万欧元或全球收入的4%)

由于必须全部选择加入(至少在我们的案例中是这样),我们决定用户接受我们的cookie来接收我们的服务

我们将不会注销当前用户给我们的概念,但是,我们将向他们展示同意页,当他们进入我们的网站之一。如果他们说是,那么我们将保存一个“接受cookie”,否则他们将无法进入我们的网站。之后,每当用户登录到我们的站点时,我们都会检查这个cookie是否存在

我在实现此解决方案时的想法是拦截用户请求,检查是否存在接受cookie,并重定向到请求的资源或控制器(在本例中,我们将asp.net mvc

我的问题是,我是否可以使用RegisterRoutes将请求路由到控制器,如果是,则重定向到请求的控制器

解决方案呢?不过,解决方案是针对不同方面的。我已将变量名称从language修改为Approve,以使其更有意义(不尝试复制):


由于该规则将于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);
 }