Предложение (идеи) о файлах cookie для Общего регламента ЕС по защите данных (GDPR) - PullRequest
0 голосов
/ 04 мая 2018

Общее постановление ЕС о защите данных (GDPR) вступит в силу с 25 мая 2018 года. Подробнее можно прочитать здесь . На этот раз все должны быть подписаны, и у них очень большой штраф (20 миллионов евро или 4% от мирового заработка!).

Поскольку все должно быть подписано (по крайней мере, в нашем случае), мы решили, что пользователь принимает наши куки для получения наших услуг.

Мы не будем выходить из текущих пользователей, чтобы дать нам концепцию, однако мы представим им страницу согласия, когда они зайдут на один из наших сайтов. Если они скажут «да», мы сохраним «accept-cookie », иначе они не смогут зайти на наши сайты. После этого, когда пользователь входит на наш сайт, мы проверяем наличие этого cookie.

Моя идея в реализации этого решения заключается в том, чтобы перехватить запрос пользователя и проверить наличие accept-cookie и перенаправить на запрошенный ресурс или контроллер в нашем случае, как мы будем asp.net mvc соответственно.

У меня вопрос, могу ли я сделать это, используя RegisterRoutes, для направления запроса к контроллеру и, если да, перенаправить на запрошенный контроллер?

Как насчет этого решения? Хотя решение для другого аспекта. Я изменил имя переменной с языка на согласие, чтобы сделать его более значимым (не пытаясь копировать):

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);
   }
}

Поскольку это правило вступает в силу 25 мая 2018 года, было бы приятно услышать вашу идею относительно другого вида реализации.

1 Ответ

0 голосов
/ 07 мая 2018

Наконец, я пришел к тому, что хотел - перехватывать запросы пользователей и перенаправлять на основе определенного 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 ( вежливость ):

 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...