c# - 重定向后会话为空并从另一个域返回
问题描述
我们有一个网站ASP.NET Web Forms,它使用另一个网站(来自另一家公司,我们无法控制)服务。为了使用他们的服务,我们调用他们的 API 并制作 HTML 表单(包括 API 的返回值)并发布表单。像这样的东西:
function foo(returnedValueFormApi) {
var form = document.createElement('form');
form.setAttribute('method', 'POST');
form.setAttribute('action', 'http://that-company.com/...');
form.setAttribute('target', '_self');
var hiddenField = document.createElement('input');
hiddenField.setAttribute('name', '...');
hiddenField.setAttribute('value', returnedValueFormApi);
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
在调用此方法之前(为了发布表单),我们创建Session
,例如:Session["Foo"]=10
。在该用户将被重定向到他们的网站后,做几件事,然后他们将用户发送回我们的网站(并发布一些与问题无关的值),Page_Load
我们的回调页面的内部事件,我们需要检查Session
(在我们的示例中,Session["Foo"]
)。问题是本届会议是null
。
强调:
- 此问题与过期时间无关,用户往返大约需要 30 秒。
- 此问题与浏览器无关,特别是
IE
- 如果我们将 of 更改
action
为form
指向我们的网站(甚至从单独的服务器提供服务),一切正常。我的意思是我们在我们的一个网站内模拟公司来重现这个问题,但我们不能。 - 这个问题与
Response.Redirect
一些 SO 的答案中提到的无关。 - 该代码工作了 5 年!只是不适用于 1 个指定域,但其他域有效!
解决方案
推荐阅读
- asp.net - Blazor 多用户问卷
- c++ - 为什么向量中使用复制构造函数
- sql - 从表中返回最大的非空列
- extjs - 尝试在 Sencha/Extjs 的本地应用程序中合并厨房水槽网格示例
- python - 将样式类添加到 pandas DataFrame HTML
- rust - 在长时间运行的 Rust 线程中引用 self
- javascript - jQuery Toggle 不显示和 animate.css 类
- python - 查找客户端时间和服务器时间之间的差异
- python - 数据框 - 更改嵌套变量
- apache-flink - 在保持每个分区顺序的同时处理 flink 中的毒 kafka 消息