【发布时间】:2012-01-11 19:29:04
【问题描述】:
我在 Asp.Net 中建立了两个网站。在开发中,它们都在我的机器上。一个托管在 IIS 中,一个托管在 IISExpress 中。我已将两个网站都配置为使用 FormsAuthentication,并在每个 web.config 中设置相同的身份验证和 httpCookies 元素:
<authentication mode="Forms">
<forms loginUrl="~/LogOn" timeout="2880" domain=".mydomain" />
</authentication>
<httpCookies domain=".mydomain" requireSSL="false"/>
但是,在标准 FormsAuthentication.SetAuthCookie 之后,第二个站点无法从第一个站点读取 .ASPXAUTH cookie。它可以从其他网站读取相同的 Asp.Net_SessionID cookie。因此,一个 cookie 正在跨应用程序传递,但第二个没有。
此外,当调试器附加到第二个应用程序并从第一个站点接收重定向时,Chrome 调试器会显示两个 cookie,Fiddler 报告两个 cookie 都已传输,并且 Response.Headers["cookie' ] 包含 .ASPXAUTH cookie。
如何实现这种跨应用程序登录?在生产中,这两个站点将在不同的子域上回答。
【问题讨论】:
-
你的场景不太清楚。您说一个站点托管在 IIS 上,另一个站点托管在 IISExpress 上。但是那些网络服务器不能监听同一个端口,对吧?所以你在
http://mydomain:80和另一个在http://mydomain:8080上,对吗?在这种情况下,您根本无法共享任何 cookie,因为您违反了同源政策。 -
不不...实际上他们正在共享 Asp.Net_SessionID cookie。我可以从第二个站点看到这一点,并且可以访问会话的内容。 FormsAuthenticationTicket 没有被传递,即使它被标记为域 cookie
-
您使用的是进程外会话提供程序吗?您如何在当然是不同进程的 2 个不同 ASP.NET 应用程序之间共享会话信息?
-
啊是的...我使用 SqlServer 作为我的会话提供程序。因此,从一个站点传递(在 cookie 中)到另一个站点的 SessionId 使会话的内容能够显示。我不明白为什么没有通过 FormsAuthenticationTicket ".ASPXAUTH",但是 SessionId 是......
-
我也看过 MSDN 文章:msdn.microsoft.com/en-us/library/eb0zx8fc.aspx 并没有发现太多运气