从另一个域获取发布的数据时,ASP.NET Webform 丢失会话

2024-03-28

Simply:

  1. 在网站中,用户登录并创建一些会话对象。

  2. 网站 A 使用 Response.Redirect 将用户重定向到网站 B 中的页面。

  3. 网站 B 使用提交按钮将表单集合发布到网站 A 上的页面。

  4. 在此特定点上,该特定用户的所有会话都会丢失,并且 Session_Start 再次触发。

这对于本地主机和生产域都是相同的。

当两个页面位于同一域时这是可以的,两个单独的域就会出现问题。

在步骤 3 中,当使用链接而不是按钮返回网站 A(显然是 wieemsh 完全限定域名)时,一切正常并且会话存在。

似乎这是一个跨平台提交/POST 问题。

会话是带有 cookie 的 InProc,无法更改此设置。

感谢您的关注。

附:谷歌搜索这个,我发现从一个页面重定向到另一个页面时存在某种类似的“丢失会话”问题。这不是由response.Redirect引起的。

Edit

此问题很可能是由 SameSite Cookie 策略引起的。我在几种条件下进行了多次测试,但我仍然无法确认这一点。


首先这是一个 4.7.1 ASP.NET Webform 项目,所以如果您使用 MVC,您只能得到一些线索。

正如@JohnPete22提到的本文 https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/说 SameSite Cookie 策略(作为一项新的安全措施)适用于 4.7.2 及更高版本,您至少可以控制打开或关闭它,但它没有说它也会影响 4.7.1项目以及对该功能没有控制,准确地说,它始终处于开启状态,但 .NET 框架版本无法识别控制命令(我不知道有任何 .NET 更新可以解决此问题)。这就是为什么回发到单独域上的页面会丢失表单收集数据的原因:以维护跨域安全性。

注意:这不是解决方案,而是解决方法:

  1. 将您的项目更新到 4.7.2 以启用 SameSite 模式,这没什么大不了的。

  2. 将此代码添加到 Global.asax Session_Start 事件中

    if (Response.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].SameSite = SameSiteMode.None;
    
        // Optional - This makes the feature secure
        // if (Request.IsSecureConnection)
        //      Response.Cookies["ASP.NET_SessionId"].Secure = true;
    }
    

    我测试了其他选项SameSiteMode.Strict and SameSiteMode.Lax但没有用,所以我干脆关闭了该功能。

  3. 将其添加到 Web.Config System.Web 部分:

    <sessionState mode="InProc" cookieless="UseCookies" />
    
  4. 为了加强安全性,您可以考虑使用以下命令检查源网站Request.UrlReferrer?.ToString()并相应地更改 SameSite 模式。

这就是全部,伙计们!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个域获取发布的数据时,ASP.NET Webform 丢失会话 的相关文章

  • ASP.NET 中的基本页面

    您是否建议在 Visual Studio 中创建的每个网站中创建一个基本页面作为父类 确切的优点 缺点是什么 如果您想重写 ASP NET 中某些内容的工作方式 将其构建到基类中比在每个页面中包含代码会更有效 我这样做的两个具体实例是 是否
  • Asp.Net Identity - 登录后更新声明

    当我的用户从我们的单页应用程序登录时 我使用 asp net 身份 WebApi 2 MVC 5 而不是 net core 添加对用户身份的声明 看起来像这样 我已经取消了对无效名称 锁定帐户等的检查 public override asy
  • 在asp.net中生成PDF文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作pdf https stackoverflow com questions 575584 how to make pdf 在 Asp net 中创建 pdf 文件 https stackove
  • 客户端验证后 RegisterOnSubmitStatement

    我需要在提交 Web 表单时但在客户端验证发生之后在流程中插入一些 Javascript RegisterOnSubmitStatement 似乎将 JavaScript 放在验证之前 有人知道如何让它渲染后吗 找到解决方案 在网络控件中
  • 如何从网址下载所有文件?

    我想从 URL 获取所有文件 文件可能有不同类型的扩展名 如何从网站 URL 获取带有 webclient 对象的所有文件 当我打开网站网址时 文件列出如下格式 框架 js 我的文件 png Class1 cs 来自 Web URL 的文件
  • ModelClientValidationRule 冲突

    我已将 vs 2011 开发人员预览版与 vs 2010 并排安装 现在 当我在 vs 2010 中运行我的 asp net mvc 3 项目时 我在使用 ModelClientValidationRule 的项目中收到以下错误 Syste
  • 带有 EPPlus 2.9 的 Chrome 16 中出现“从服务器收到重复标头”错误

    我正在玩EPPlus 2 9 http epplus codeplex com 由于某种原因我得到Duplicate headers received from server当我尝试下载单曲时出现错误 xlsx使用 Chrome 16 的文
  • ASP.Net Identity 2,双因素安全代码时间跨度

    我们通过电子邮件将 2FA 与 ASP Net Identity 2 结合使用 这在大多数情况下工作正常 但在某些情况下 安全代码发送到用户电子邮件时会出现延迟 安全代码的 6 分钟窗口就会变得太短 有没有办法调整 2FA 代码的时间窗口
  • 从更新面板异步回发后保持滚动位置

    我在使用 ASP NET 和更新面板时遇到一些问题 问题是 每次从更新面板发生部分回发时 页面都会滚动回顶部 在我的大多数页面上 这并不是一个大问题 但在某些页面上可能会变得很长 然后 当用户位于页面底部时 我显示 jQuery 弹出窗口R
  • ASP.NET WebForms:短路验证

    我有一个正在验证的网格文本框
  • 检查用户是否登录ajax页面更改

    作为我正在构建的网络应用程序的一部分 我需要在用户更改页面时检查用户是否已登录 在普通的非ajax站点上 这很容易 因为我可以将PHP会话条件语句放在标头中 并且在每次页面更改时调用的标头将确定是否显示登录页面 但将其视为头文件仅在 aja
  • EntityDataSource 在查询中将 * 替换为 % 通配符

    我有一个在很多地方使用 EntityDataSource 的应用程序 在 EDS 中 我根据 TextBox 中的用户输入手动构建Where 子句 我希望用户在查询数据时能够输入 星号 而不是 有没有像使用 Entity SQL 或 EDS
  • 有没有办法让VS2010发布向导在发布网站时复制App_offline.htm?

    看到后汉塞尔曼 你做错了 视频 http www hanselman com blog WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong aspx我开始使用网络发布 htt
  • ASP.net URL 将子目录重写为外部 URL

    我需要将子目录 URL 重写到外部域 示例 访问 https example1 com test https example1 com test https example2 com hello https example2 com hel
  • 更改 iis 7 的 Inet 根文件夹

    我面临着一个非常令人恼火的挑战 我必须在生产服务器中部署 ASP NET MVC 3 应用程序 在这个生产服务器中我有两个驱动器C and D 我有权将我的网站放在D 数据文件夹我不能使用C 不幸的是 IIS 创建了Inet目录在C 显然
  • 在 asp.net gridview 中应用引导分页样式的简单脚本

    是否有任何简单的 jquery 脚本 插件可以在 asp net gridview 中应用引导分页样式 我发现了一些关于如何执行此操作的好提示 例如以下链接 here http www programming free com 2013 0
  • 如何验证文本是否为有效的 HTML?

    我正在使用旧版本泰勒里克的 http www telerik com Editor http demos telerik com aspnet ajax editor examples default defaultcs aspx控件 并将
  • DbContext 已被处置

    我使用 ASP NET MVC 4 和 SQL Server 2008 开发了一个 Web 应用程序 我创建了 ContextManager 类 以便在所有页面中只有一个数据库上下文 public static class ContextM
  • 发送帖子请求多部分表单数据。某些 Microsoft 服务出现错误“超出行长度限制 100”

    该数据是从 Postman 发送的 它的工作原理是 这是一个以 200 状态通过的邮递员请求 POST api upload HTTP 1 1 Host api test contoso se Content Type multipart
  • 分布式张量流中的并行进程

    我有带有训练参数的张量流神经网络 它是代理的 策略 网络正在核心程序的主张量流会话的训练循环中进行更新 在每个训练周期结束时 我需要将该网络传递给几个并行进程 工作人员 这些进程将使用它来从代理策略与环境的交互中收集样本 我需要并行执行 因

随机推荐

  • 什么是“异步固定句柄”?

    我正在尝试调查一个非常严重的软件崩溃 这可能与托管堆损坏有关 因为它发生在垃圾收集期间 将 WinDbg 与 SOS gchandles 命令一起使用 我得到类似的信息 0 000 gt gchandles GC Handle Statis
  • Magento - 获取产品集合的结果视图 HTML

    我从网络服务中获取了 magento id 列表 我将它们加载到数组中 product ids 所以我有这样的东西 Array 0 gt 1965 1 gt 3371 2 gt 1052 然后我可以将其制作成一个集合 collection
  • OnCollisionEnter() 在 Unity3D 中不起作用

    我有一个带有网格碰撞器的对象和一个带有球体碰撞器的预制件 我希望如果两者发生碰撞 预制件的实例就会被破坏 我在脚本中写了以下内容 private void OnCollisionEnter Collision c if c target D
  • 单线程应用程序是一种死技术吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VB6的默认字体从哪里获取

    VB6从哪里得到的default字体来自 是系统字体吗 是由地区决定的吗 无论实际字体如何 它的大小总是相同吗 应用程序的字体在Font控件的属性 VB6默认有MS 无衬线字体 大小 8 这是 Windows 95 98 中的默认系统字体
  • 根据内容调整iframe高度

    我正在使用以下脚本自动调整 iframe 高度 function autoIframe frameId try frame document getElementById frameId innerDoc frame contentDocu
  • PHP 中有从数组中提取“列”的函数吗?

    我有一个数组的数组 具有以下结构 array array page gt page1 name gt pagename1 array page gt page2 name gt pagename2 array page gt page3 n
  • 如何在 Raphael 中使用 eve() ?

    有人可以给我一个拉斐尔的简单例子吗eve 我不太明白参数以及如何调用事件 我查了一下 但好像用过的人不多 事件功能的简单示例Rapha l http www raphaeljs com 我们定义将触发事件的函数 function bar v
  • javascript 数组的范围从 IE9 到 FireFox/Chrome 有所不同

    我已经缩小了我的基本问题的范围 从 IE9 到 FireFox 和 Chrome 数组的范围有所不同 在以下函数 仅摘录 中 我声明一个数组 然后通过调用 getJSON 来填充它 因为引用 HoldEm 的行出现在 ProcessArra
  • 查找此 XML 文档中的值的正确 XPath 查询是什么?

    假设我有这个 XML 文档
  • 在 Node.js 中休眠

    假设没有 本地 方法来实现这一点 我的解决方案是 sleep function time var stop new Date getTime while new Date getTime lt stop time return new Pr
  • OleDBConnection 连接字符串

    当我尝试这段代码时OleDBConnection open 不起作用 没有抛出任何错误 只需打开 Windows 窗体并说出任何内容我看到 messageBox try1 但程序没有显示 try2 我的连接字符串有什么问题请帮助我也尝试过
  • 如何在单个 SELECT 查询中设置多个 T-SQL 变量?

    我有3个变量 testid sampleid and clientid 我该如何设置 sampleid and clientid通过执行此查询一次 SELECT sample sampleid client clientid FROM db
  • 现在使用 async/await 安全吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 Javascript 中使用 async await 代替安全吗 现在生成器承诺 知道语法尚未制定并且 会随着 ES8 的发布而出现吗 我可
  • Gnuplot - 使用带有 png 终端的 replot

    我正在尝试在 Gnuplot 中使用带有 png 终端的 replot 如果我执行以下操作 我会在一张图表上绘制两个图 没有任何问题 plot sin x x replot sin x 现在 如果对 png 终端类型执行相同操作 则生成的
  • ignite服务器重新连接后如何恢复缓存

    如果有人能帮助我 我真的很感激 我有一个用Java编写的ignite服务器 还有一个用C 编写的客户端 客户端可以连接到服务器 并且可以正确获取服务器的缓存 服务器重新启动后 客户端会收到来自服务器的 EVT CLIENT NODE REC
  • 如何在 Windows 中使用 Sphinx 创建 PDF 文档

    我正在使用 Sphinx 在 Windows 中为我的 Python 项目创建文档 我需要生成 PDF 文档 我发现了很多关于如何在 Linux 中执行此操作的解释 但没有很好的解释如何在 Windows 中执行此操作 据我了解 我需要使用
  • 如何在MatLab中求曲线上一点的法向量

    我有一条曲线 我想找到该曲线上给定点的法线向量 稍后我必须找到该法线向量与另一个向量的点积 我尝试了MatLab的梯度函数 但我想当我们需要在特定点找到梯度时它不起作用 但我不确定我是否错了 请指导我如何在 MatLab 中实现这一目标 提
  • 创建一个 NSArray,初始化为 N 个对象,所有对象都是同一个对象

    我想创建一个具有相同值的对象的 NSArray 比如 NSNumber 全部初始化为 1 但计数基于另一个变量 除了处理 C 风格数组的初始化器之外 似乎没有一种方法可以使用 NSArray 的任何初始化器来执行此操作 知道是否有一种简短的
  • 从另一个域获取发布的数据时,ASP.NET Webform 丢失会话

    Simply 在网站中 用户登录并创建一些会话对象 网站 A 使用 Response Redirect 将用户重定向到网站 B 中的页面 网站 B 使用提交按钮将表单集合发布到网站 A 上的页面 在此特定点上 该特定用户的所有会话都会丢失