internet-explorer - IE 或 Edge Print 对话框在没有 session 的情况下向服务器发送请求(因为 session cookie 上的 SameSite=Lax)

标签 internet-explorer cookies microsoft-edge printdialog samesite

我有一个asp.net网站,用户可以登录该网站,成员(member)可以通过Ctrl+P获取报告或打印页面。

最近,当我的成员(member)在 IE 中打开我的网站并尝试打印时,他们已注销!

为什么? 因为IE打印对话框向服务器发送一些没有 session cookie的请求,所以StateServer为该客户端释放新的 session ,然后用户注销。

为什么打印对话框发送请求? 我不知道,但我猜 IE 打印对话框会尝试渲染页面并准备好打印。

为什么打印对话框不发送当前 session cookie? 因为.net的新更新为 session cookie设置了SameSite=lax,所以来自打印对话框的请求无法发送当前 session cookie。 https://support.microsoft.com/en-us/help/4524419/kb4524419

如何阻止 IE 打印对话框发送请求? 或者我如何强制 IE 打印对话框发送相同的 session cookie?

有什么想法吗?

编辑: 我创建了一个示例项目来展示这个问题。您可以下载我的项目并托管在 IIS 上,然后打开 Default.Aspx 并尝试在 IE(或 Edge)中打印该页面。 你会看到我的问题。 https://easyupload.io/w6vvpy

最佳答案

我确认了这个问题。目前,作为一种解决方法,一旦删除 SameSite 属性,问题就会消失。这不是最佳解决方案,但目前似乎可行。

var cookies = this.Response.Cookies;
FormsAuthentication.SetAuthCookie( "JohnDoe", rememberMe );
var allCookies = cookies.AllKeys.Select( key => cookies[key] ).ToList();
allCookies.ForEach( cookie => cookie.SameSite = (SameSiteMode)(-1) );

In ASP.NET Core 3.0 and later the SameSite defaults were changed to avoid conflicting with inconsistent client defaults. The following APIs have changed the default from SameSiteMode.Lax to -1 to avoid emitting a SameSite attribute for these cookies

https://learn.microsoft.com/en-us/aspnet/core/security/samesite

我们所做的事情是,创建了 HttpModule,它在响应中查找 cookie 并相应地修改它们。

关于internet-explorer - IE 或 Edge Print 对话框在没有 session 的情况下向服务器发送请求(因为 session cookie 上的 SameSite=Lax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59151616/

相关文章:

html - 覆盖 IE 本地 Intranet 设置

css - 有没有办法让浏览器在设备模式下减少 "width"以及 "device-width"

html - 禁用按钮在 Edge 浏览器上是可点击的

javascript - 为什么这个弹出窗口在 IE 上失败?

html - 溢出-y :scroll won't Display scrollbar in Internet Explorer

html - Modernizr、HTML5 和 Internet Explorer 中的空白网页

c# - WebAPI/Owin - 登录后身份未被授权

C# 持久性 cookie

javascript - 使用 cookie 保持 jQuery 菜单打开

javascript - 基于 Chromium 的浏览器中奇怪的 JavaScript 错误