添加同站;安全到经典 ASP 中的 Cookie

Geo*_*ff 4 cookies vbscript asp-classic

我们正在运行一个经典的 ASP 网站,并且在 Chrome 浏览器中遇到了 Cookies 问题。Chrome 正在强制安全地设置 cookie ( https://www.chromestatus.com/feature/5633521622188032 )

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

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure" 
Response.Cookies("TestCookie").Expires = Date + 1
Run Code Online (Sandbox Code Playgroud)

但是,这在 Chrome 中存在问题,当调用不同域的资源时,会话会突然结束。

Chrome 的 cookie 详细信息显示:

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure" 
Response.Cookies("TestCookie").Expires = Date + 1
Run Code Online (Sandbox Code Playgroud)

请注意,没有提到我认为应该有的“安全”。为此在经典 ASP 中设置 Cookie 的正确方法是什么?

Lan*_*art 5

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

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

测试你的代码,这是响应头的内容:

响应头

<%
Function FormatCookieDateTime(interval, value, tz)
  Dim dt: dt = DateAdd(interval, value, Date())
  Dim tm: tm = Time()
  Dim result: result = WeekDayName(WeekDay(dt), True) & ", " & _
    Right("00" & Day(dt), 2) & "-" & _
    MonthName(Month(dt), True) & "-" & _
    Year(dt) & " " & _
    Right("00" & Hour(Time()), 2) & ":" & _
    Right("00" & Minute(Time()), 2) & ":" & _
    Right("00" & Second(Time()), 2) & " " & tz
  
  FormatCookieDateTime = result
End Function

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure; expires=" & FormatCookieDateTime("d", 1, "GMT")
%>
Run Code Online (Sandbox Code Playgroud)

构建了一个功能,可以更轻松地使用正确的格式设置到期时间。

记住Secure是为了安全连接

因为您正在设置两个 cookie (一个 viaAddHeader()和一个 via Response.Cookie),所以可能不清楚,但是Secure如果连接未使用 HTTPS,chrome 将忽略设置的第一个 cookie 。事实上,如果你在 Chrome Dev Tools 中查看请求,你应该在Set-Cookie标题旁边看到一个警告符号,上面写着(当悬停在上面时)沿着以下行的内容;

这个 set-cookie 具有“安全”属性,但不是通过安全连接接收的。