ASP.NET Core中跨控制器GDPR Cookie策略框失效问题求助
问题根源
当你在不同控制器页面设置Cookie时,浏览器会默认将Cookie的路径设为当前页面的路径(比如访问/Test控制器时,Cookie路径自动设为/Test)。这就导致只有在对应路径下才能读取到该Cookie,切换到其他控制器视图时,因为读不到之前设置的cookiePolicy Cookie,弹窗就会再次出现。
解决方案
要实现Cookie的全域可读可写,核心是显式指定Cookie的path属性为根路径/。这样所有站点内的路径都能访问这个Cookie。
修改Cookie设置代码
原来的代码未指定路径,导致路径自动分配:
document.cookie = cName + "=" + cValue + ";";
添加path=/参数后,Cookie会绑定到站点根路径,全站生效:
document.cookie = cName + "=" + cValue + ";path=/";
验证场景
设置完成后,以下场景均能正常读取到Cookie:
localhost:portlocalhost:port/localhost:port/Controller/Action
无论在站点内哪个位置设置Cookie,其他路径的页面都能读取到,弹窗不会重复触发。
完整代码示例
Razor视图中的确认按钮
<button type="button" onclick="setCookie('cookiePolicy', '1')"> Accept </button>
控制弹窗显示的脚本
$(window).on('load', function() { var cookieBox = document.cookie.indexOf('cookiePolicy'); if (cookieBox == -1) $('#cookieBox').modal('show'); });
完善后的setCookie函数
function setCookie(cName, cValue) { document.cookie = cName + "=" + cValue + ";path=/"; }
内容的提问来源于stack exchange,提问作者user1016675
相关产品推荐
相关产品推荐

