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 的正确方法是什么?
您当前设置响应 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 具有“安全”属性,但不是通过安全连接接收的。
| 归档时间: |
|
| 查看次数: |
4138 次 |
| 最近记录: |