2

我正在将 SqlMembershipProvider 与 asp.net 一起使用,它工作正常,直到我尝试使用 iframe 或框架。

当我在没有他们的情况下登录时,我没有任何问题,但是如果我将我们的网站从客户的站点打包并尝试登录,它只会闪烁并返回原始站点,所有字段都已清除。

我可以在 IE 8 和 9 上使用我们的网站轻松复制此内容,但我对 firefox 或 chrome 没有任何问题。

有没有另一种方法来完成这个或绕过它?

====== 编辑 ======

我们的客户从他们的网站调用我们的“门户”,并希望将我们的门户无缝集成到其中,就好像它是他们网站的一部分一样。

我们认为我们可以通过 iframe 从他们的站点包装我们的门户来完成此操作,但我在登录时没有任何运气,据我所知,这是一个跨域 cookie 问题(?)。

希望这有助于澄清一些事情......

4

3 回答 3

7

您可以使用 FormsAuthentication.SetAuthCookie,并以加密方式在 URL 中传递初始凭据,

这个问题将在 Internet Explorer 中对您有很大帮助,其他兄弟也可以,

Cookie 被阻止/未保存在 Internet Explorer 的 IFRAME 中

我已经用 Chrome、Firefox、Opera 进行了测试(第一次会给出警告),它运行良好,没问题,但是使用 IE,你需要看到我提供的问题。

于 2012-12-17T10:50:01.293 回答
6

除非您指定P3P 标头,否则Internet Explorer 不会通过 IFRAMES 发送 cookie

最简单的方法是在您的 Web.config 中指定一个自定义 HTTP 标头:

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="P3P" value='CP="CAO PSA OUR"'/>

这样你就不必用这些东西弄乱你的代码了。

这个 HTTP 标头称为Compact P3P,它应该可以解决问题,因为我以前的情况与您相同。

恐怕 Safari 浏览器可能有点棘手,因为除非用户与 IFRAME 内容交互,否则 Safari 不会发送 cookie,如下所示:Iframe、跨域 cookie、p3p 策略和 safari 错误:所需的防伪令牌未提供或无效。在您的情况下,这可能不是什么大问题。

干杯。

于 2012-12-10T17:21:22.570 回答
0

如果可以选择在 DNS 中安装子域并将主机标头添加到 IIS,您可以尝试通过将子域设置为指向您的站点来规避跨域安全性。

[top] example.com @ customerIP => [iframe] portal.example.com @ yourIP

通过将此 JavaScript 放入您的代码中,确保域是共享的:

document.domain = "example.com"
于 2012-12-13T23:25:57.113 回答