Asp.net 如何在两个网站中访问同一会话?

Asp.net 如何在两个网站中访问同一会话?,asp.net,.net,session,iis,appdomain,Asp.net,.net,Session,Iis,Appdomain,我需要知道如何访问由一个网站或另一个web应用程序中的web应用程序设置的会话 例如,我在firefox选项卡中登录了gmail.com,然后在另一个选项卡中打开了orkut.com,在这里我不必登录 我需要在ASP.Net中的两个不同web应用程序中访问或共享同一用户会话。出于良好的安全原因,您不能使用内置ASP.Net会话跨应用程序域 您正在寻找的是单一登录系统。这意味着您只需登录一次,但在应用程序之间切换后,您可能需要从db重新加载该应用程序的会话(如果没有)。这可以在您从登录中获得其身份

我需要知道如何访问由一个网站或另一个web应用程序中的web应用程序设置的会话

例如,我在firefox选项卡中登录了gmail.com,然后在另一个选项卡中打开了orkut.com,在这里我不必登录


我需要在ASP.Net中的两个不同web应用程序中访问或共享同一用户会话。

出于良好的安全原因,您不能使用内置ASP.Net会话跨应用程序域


您正在寻找的是单一登录系统。这意味着您只需登录一次,但在应用程序之间切换后,您可能需要从db重新加载该应用程序的会话(如果没有)。这可以在您从登录中获得其身份时完成。

除非您的应用程序共享同一个域(例如,在example.com上共享一个域,或者在a.example.com上共享一个域,在b.example.com上共享另一个域),否则Cookie在这里对您没有帮助。您需要两个应用都可以访问的会话存储,例如,在都可以访问的数据库中(例如,stackoverflow.com和serverfault.com就是这样做的)

但是,您需要找出站点A上的哪个用户帐户/会话对应于站点B上的相同帐户;您只需执行一次(继续执行SO“”)。

您无法从完全不同的服务器访问同一个“会话”

根据您的描述,您只需要使用相同的登录名,例如,您不想再次提供您的凭据。正如多夫回答的那样,这是一个解决方案。维基百科的文章包含很多有用的链接

通常,您使用第三方服务(您也可以自己提供,您不需要任何人提供)和不同服务器之间的一些重定向,以便获得某种类型的用户身份认证

基本上,OpenID(例如在stackoverflow上使用的OpenID)是同一问题的解决方案,尽管您通常没有隐式登录-您需要显式登录

如果您控制两个参与服务器以及身份验证的“第三方”(实际上可能是两个服务器之一的一部分),那么您应该能够轻松地提供一些隐式登录


不过,如果两个网站显然不属于同一个网站,请注意可能存在的隐私问题。如果你主动分享他们的身份,如果他们不认识到两台服务器属于同一个实体,他们可能会感到疏远。

请查看代码项目中的一篇非常好的文章

还可以从asp.net检查此线程


希望这些会对你有很大帮助。

为了达到你想要的效果,你不能通过会话来实现,因为每个会话都是相互独立的,不能从另一个会话访问资源。正如其他人所说的,您可以使用的最接近的东西是OpenID之类的身份验证系统的某种实现


对于寻找如何为ASP.NET项目实现此类系统的示例来说,这是一个很好的起点。

请记住,在我们的应用程序上通常有两个会话概念(当然是ASP.NET,因为您标记了这两个概念)。有一个身份验证会话,它通常由ASP.NET中的FormsAuth cookie覆盖,然后有一个会话维护会话数据。他们通常是独立的。究竟需要分享什么?您是否尝试共享用户名以外的会话状态,因此如果我在一个应用中执行某项操作,而另一个应用从seision状态知道该操作?我希望共享登录的用户id、密码或任何身份验证详细信息。因此,您希望共享身份验证详细信息,而不是会话变量?只是用户名,还是该用户已通过身份验证。你说的是用户名/密码。为什么您需要访问密码?那么关于单次登录的答案将成为最佳答案,因为跨会话共享密码非常非常危险。