子域读取和删除主域Cookie

时间:2018-08-16 18:50:35

标签: javascript cookies

我需要在主域中设置一个cookie,然后阅读然后从子域中删除该cookie。但是我还需要将来在该域上再次设置该Cookie,并稍后在子域上读取它。基本上是单向通信流。我无法让主域处理未设置Cookie的问题,因为用户访问主域和子域之间可能要花费几个月的时间。

我在域上设置一个cookie,如下所示:

document.cookie = "mycookie=testcookie;domain=example.com;max-age=31536000;";

我可以在另一个子域上访问它,例如:

document.cookie.replace(/(?:(?:^|.*;\s*)testcookie\s*\=\s*([^;]*).*$)|^.*$/, "$1");

然后我尝试从子域中杀死它:

document.cookie = "mycookie=;domain=example.com;max-age=0;";

那是行不通的。 Cookie仍然设置。

但是,将其设置为这样会清除它:

document.cookie = "mycookie=;domain=example.com;max-age=31536000;";

现在从子域中请求时返回""

但是...如果我返回到域并再次设置它,并且可以看到已经设置,则子域仍返回""

我是否缺少某种……的cookie层次结构?我不确定这是如何表现的或如何克服的。

1 个答案:

答案 0 :(得分:1)

要启用此功能,您必须在根域之前放置句点Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$3" Then 'if cell B3 has changed Application.EnableEvents = False ' disable events to prevent this event handler being called in a possibly infinite loop ProcessLineNumberValidation ' process your range Application.EnableEvents = True ' enable events back on End If End Sub ,如下所示:.这很重要,因为设置了cookie标准化的方式。此格式应与大多数现代浏览器兼容。

此外,跨不同子域访问或修改Cookie时,路径必须相同。最简单的方法是仅使用域的根路径.example.com。例如,如果您从/设置cookie并尝试从sub1.example.com/page1访问它,即使您将域设置为sub2.example.com/page2,也必须在其中设置.example.com以便从其他子域上的任何路径访问和修改它。

最终:

path=/

将允许您对其进行设置,并且

document.cookie = "mycookie=testcookie;domain=.example.com;path=/;max-age=31536000";

将允许您删除它。