如何在两个网站中访问同一个Session?

时间:2009-10-07 12:24:30

标签: asp.net .net session iis appdomain

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

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

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

5 个答案:

答案 0 :(得分:7)

出于安全原因,您无法使用内置的asp.net会话跨越应用域。

您正在寻找的是单点登录系统。这意味着您只需要登录一次,但是在切换应用程序之后,如果不存在,则可能必须从db重新加载该应用程序的会话。这可以通过登录获得他们的身份来完成。

答案 1 :(得分:5)

请查看Code项目中的一篇非常好的文章 Single sign-on across multiple applications in ASP.NET

还要从asp.net检查这个帖子 http://forums.asp.net/t/1023838.aspx?View=Flat

希望这些可以帮到你。

答案 2 :(得分:4)

除非您的应用程序共享同一个域(例如,在example.com上,或者在a.example.com上,另一个在b.example.com上),否则Cookie将无法帮助您。您需要一些可由您的应用访问的会话存储,例如:在一个都可以访问的数据库中(例如,stackoverflow.com和serverfault.com是如何做的)。

但是,您需要以某种方式找出,站点A上的哪个用户帐户/会话对应于站点B上的同一帐户;你只需要这样做一次(继续SO“associate your accounts”)。

答案 3 :(得分:3)

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

根据您的描述,您只需使用相同的登录信息,例如您不想再次提供凭据。正如鸽子回答的那样,这是用Single Sign On解决方案完成的。维基百科文章包含许多有用的链接。

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

基本上是OpenID,例如这里使用stackoverflow,是同一问题的解决方案,虽然你通常没有隐式登录 - 你需要明确登录。

如果您同时控制参与服务器以及身份验证“第三方”(实际上可能是两台服务器之一),您应该可以轻松提供一些隐式登录。

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

答案 4 :(得分:1)

为了达到你想要的效果,你将无法通过Sessions进行,因为每个会话彼此独立,无法访问另一个会话的资源。正如其他人所说,你可以使用的最接近的东西是某种类型的实现和身份验证系统,如OpenID。

DotNetOpenAuth是一个很好的起点,可以查找有关如何为ASP.NET项目实现此类系统的示例。