【发布时间】:2020-04-19 04:26:52
【问题描述】:
我有一个 ASP.NET MVC 应用程序(比如 App_A)和另一个 ASP.NET 应用程序(比如 App_B)。 App_B 有一个 iframe,可在其中加载 App_A。
App_B 上的代码如下所示:
iframe.Attributes["src"] = frameURL;
其中 frameURL 是一个包含 App_A 链接的变量。
当 iframe 加载 URL 并调用 App_A 上的 index() 方法时,我正在会话 Session["CartID"] = 373895 中设置一个值,并且我正在使用 RedirectToAction("Shipping")。但在Shipping() 操作方法中,会话似乎是null。设置会话变量和调用RedirectToAction() 的代码在 iframe 中。
我之前在 Safari 浏览器上遇到的类似问题:
这在过去 2 年中一直运行良好,没有任何问题。以前,我只在 Safari 浏览器上遇到 CORS 问题。由于父窗口和 iframe 上的网站来自不同的域,重定向后我无法在 iframe 中保留会话值,因为它正在重置。要在 Safari 上解决此问题,我必须在父窗口上加载 iframe 站点 (App_A),设置 cookie,然后重定向回父网站并再次在 iframe 中加载 App_A。这使我即使在重定向之后也能保留会话值。现在我在 Chrome、Firefox 和 Microsoft Edge 上遇到了类似的问题,我尝试了适用于 Safari 的相同修复(如上所述),但我仍然无法在 Chrome 和其他浏览器上保留会话值。
一些调试信息:
我尝试对此进行调试,并将Session_Start() 方法添加到Global.asax 文件中,它被命中两次,一次在调用RedirectToAction("Shipping") 之前和一次之后。 SessionID 在调用RedirectToAction("Shipping") 之前和之后也是不同的。
仅当我从本地计算机运行 App_A 时才会出现此问题。当我在我们的生产站点中尝试它时,它运行良好,没有任何问题。此外,当我在父窗口上加载 App_A 时,它会保留会话值而没有任何问题。也就是说,在 App_B 上,我将 storefrontiframe.Attributes["src"] = frameURL; 替换为 Response.Redirect(frameURL);,当 App_A 加载到新窗口时,会话值将被保留而没有任何问题。
我不确定为什么我的会话值在调用RedirectToAction() 后突然被清除。任何帮助将不胜感激。
【问题讨论】:
-
欢迎来到 SO!我们可以理解您的沮丧,但如果您想获得一些帮助,您应该更加具体。你是如何解决 Safari 的问题的?那里有什么问题?专注于问题。最好说:“我在这个设置上遇到了这个问题......我已经尝试了很多......”
-
@DavidGarcíaBodego 对不起,也许我应该更好地解释 Safari 问题。我遇到了 Safari 的 CORS 问题。由于父窗口和 iframe 上的网站来自不同的域,因此在重定向后我无法保留会话值,因为它正在重置。要在 Safari 上解决此问题,我必须在父窗口上加载 iframe 站点 (App_A),设置 cookie,然后重定向回父网站并再次在 iframe 中加载 App_A。这使我即使在重定向之后也能保留会话值。我现在对 Chrome 尝试了同样的操作,但我的会话值正在重置。
-
所以,请在您的原始帖子中介绍它。
-
好的,感谢您的回复。我已经更新了我原来的帖子。
标签: c# asp.net asp.net-mvc session