添加相同的站点;在经典ASP中保护Cookies

添加相同的站点;在经典ASP中保护Cookies,cookies,vbscript,asp-classic,Cookies,Vbscript,Asp Classic,我们正在运行一个经典的ASP网站,Chrome浏览器中的Cookie存在问题。Chrome正在强制安全设置cookie() 我们正在按如下方式设置cookie: Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure" Response.Cookies("TestCookie").Expires = Date + 1 然而,Chrome也有问题,当调用不同域的资源时,

我们正在运行一个经典的ASP网站,Chrome浏览器中的Cookie存在问题。Chrome正在强制安全设置cookie()

我们正在按如下方式设置cookie:

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure" 
Response.Cookies("TestCookie").Expires = Date + 1
然而,Chrome也有问题,当调用不同域的资源时,会话会突然结束

Chrome的cookie详细信息显示:

发送请求
只有相同的站点连接
注意,没有提到我认为应该提到的“安全”。
在classic ASP中设置Cookie的正确方法是什么?

当前设置响应Cookie的方法存在问题

使用
Response.Cookies
在使用
Set Cookie
设置标题后,实际上是在创建一个名为“TestCookie”的新空Cookie。相反,您希望将到期日合并到现有的
Set Cookie
头中

在测试代码时,以下是响应标题内容:


构建了一个函数,使使用正确的格式设置到期日变得更容易

请记住,
Secure
用于安全连接 由于您正在设置两个Cookie(一个通过
AddHeader()
设置,另一个通过
Response.Cookie
),因此可能不清楚,但如果连接未使用HTTPS,chrome将忽略设置了
Secure
的第一个Cookie。事实上,如果你在Chrome Dev Tools中查看请求,你应该会在
Set Cookie
标题旁边看到一个警告符号,上面写着(当鼠标悬停在上方时)与

此集cookie具有“Secure”属性,但未通过安全连接接收


标准的Response.Cookies方法无法可靠地处理使用较低级别的Reponse.Addheader设置的Cookies。我也经历过同样的事情

我无法测试,但您可能需要尝试两种方法:

  • 不要在同一ASP代码块中使用这两条指令。我猜使用
    AddHeader()
    设置cookie将绕过classic ASP的cookie集合。因此,经典ASP将不知道此cookie已设置。您可以尝试在一个页面上设置此cookie,将其发送到浏览器,然后在另一个页面上设置过期时间

  • 尝试使用相同的
    AddHeader()
    指令设置过期时间。您必须查看如何在页眉级别执行此操作,但这肯定是可能的

  • 我有一些在线示例代码,它使用
    Response.AddHeader()
    ,设置了一个安全且仅HTTPOnly的cookie,但它没有设置过期,这会导致cookie在浏览器(选项卡)关闭时过期:


    你不知为什么?抱歉@Lankymart;重新阅读你的答案,我意识到你解释了同样的情况,但措辞不同。我略读了你的答案,但没有看到你在谈论同样的问题。我不是作家,所以它不会那么有说服力。在第二行的DateAdd用法中,参数似乎是交换的,应该是
    DateAdd(interval,value,Date())
    ?删除指向此答案的链接-。URL重写方法可能是无需修改许多经典ASP代码的最简单方法。