2010-03-18 45 views

回答

2

您需要传递session-cookie,并在新域上重新设置该cookie。这将使会话在多个域中生效(假设您使用相同的应用程序)。

实施例:

从section1.com链接:

< A HREF =“http://www.section2.com/?S = askdjh3k4jh234kjh” >

然后,OnSessionStart(或OnRequestStart)检查查询参数s和连接会话吧。意思,只是手动设置cookie的ASP.NET_SESSIONID给你传递的价值。

这有严重的安全隐患,所以除非你知道自己在做什么,否则不要允许这样做。另一种解决方案可能是将某些东西存储到通用后端(数据库?)中,并使用代表实际会话的令牌(和设置基于该标记的cookie),当您在离开section1.com时导航到中间页面时生成该标记 - > transferusertonewdomain.aspx - > section2.com/?token=randomTokenThatMatchSessionInDatabase

这会阻止任何人通过知道cookie的价值来劫持会话。但是,如果你对计算机有点熟悉的话,那也不会少。

0

你可以使用cookie来传递它,仍然在研究如何找出答案。我会重新发布。

**编辑

还有另外一个堆栈溢出问题,看看是否有帮助,315132

它基本上问

我需要分享与两个不同的域之间的SSO信息 cookie,可以这样做在PHP和 如何?

给出的答案是

在这两个领域,将图像或从 其他域拉 其他网页元素。使用 的URL通知域A上的用户X为 的其他域,并让域B 将该用户ID与其系统上的该用户 相关联。

正确执行 有点复杂,但如果你认为它通过 它会工作得很好。

Vinko指出在评论 (谢谢!),我不应该把它 理所当然地认为你了解所涉及的 安全隐患。如果这 信息的任何值给任何人的, 那么你应该确保您使用 适当的加密,认证等 避免释放敏感 信息,避免各种 攻击(重播,中间人, 等) 。这不应该太过于繁琐 既然您控制了这两个网站,并且 您可以选择一个安全密钥 两者,因为通过这个 特殊URL通信仅在 两个服务器之间。请记住它。

用户是Adam Davis。

0

除非您进行一些自定义设置,否则会话特定于应用程序,无论您使用的会话模式如何。 Here's an article讨论如何自定义SQL会话,以便您可以跨多个应用程序使用会话。

0

您应该首先将sessionState从“InProc”更改为StateServer或SqlServer,确保所有站点(域和服务器)上的MachineKeys都相同,然后设置相关的后端系统以捕获状态信息。

更多信息,请访问:

Session-State Modes

ASP.NET State Management Overview

+1

这不会自动允许跨域的会话。这是一个浏览器问题,它不会尝试使用域之间的相同会话。然而,在stateserver或sqlserver中使用会话允许在应用程序之间或甚至多个web服务器之间共享会话。然而提交者正在使用相同的应用程序,所以InProc很好。 – jishi 2010-03-18 17:50:17

2

如果您有多个域(而不仅仅是子域,这是比较容易),你会这样做比你想要的更复杂,因为你不能在不同的域之间共享cookie。

通常的解决方法是在由asp.net页面(或HttpHandler,如果你喜欢)提供的其他域上嵌入链接图像。该页面应该包含具有唯一标记的查询字符串和该数据的哈希版本,并附加一些共享密钥。然后,该页面将在适合该域的响应上设置一个cookie,以将自己与适当的数据关联起来。它通常会提供1x1的透明图像作为响应。通常,您只需在登录到其中一个网站时执行此操作。

相关问题