javascript 在_layout.cshtml中设置cookie,更改控制器时不可用

z9gpfhce  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(115)

我正在设置一个gdpr cookie策略框。如果设置了Cookie,则该框不应再次出现。
我设置cookie如下:

<button type="button" onclick="setCookie('cookiePolicy', '1')"> Accept </button>

然后我用这个脚本展示cookie框:

$(window).on('load', function() {
  var cookieBox = document.cookie.indexOf('cookiePolicy');
  if (cookieBox == -1)
    $('#cookieBox').modal('show');
}

这在我的www.example.com webapp的登录页面中按照预期工作asp.net,但是在从另一个控制器而不是默认控制器调用视图后,cookie框将再次出现。在chrome的devtools中也看不到这个cookie。
在本例中,cookie的路径是“/”,而如果我接受新控制器上的cookie框,则该示例的路径将是Test-Controller中的“/Test”。
有没有办法:将cookie写入可访问的域范围,还是读取cookie域范围?
这是为了在asp.netrazor视图的www.example.com核心中工作。cshtml
先谢谢你了。

**编辑:**接受的答案具有预期的效果,但需要注意的是,这似乎也是默认行为。实际的问题是,cookie的路径是自动分配的,因为它没有被设置在首位:

document.cookie = cName + "=" + cValue + ";"

明确地添加路径停止了任何不稳定的行为,并且使cookie在域范围内可见,即使不存在“/”。

document.cookie = cName + "=" + cValue + ";" + ";path=/";

适用于:

  • 本地主机:端口
  • localhost:port/
  • localhost:port/Controller/Command

从域中的任何位置设置时localhost:port

g6ll5ycj

g6ll5ycj1#

您可以在检查cookie时通过添加domain属性来读取域范围的cookie

$(window).on('load', function() {
  var cookieBox = document.cookie.indexOf('cookiePolicy');
  if (cookieBox == -1)
  $('#cookieBox').modal('show');
}).attr('cookiePolicy', '1', {expires: 365, path: '/', domain: 'azerty.com'});

别忘了将“azerty.com“替换为您的实际域名

相关问题