我有一个不同部分的应用程序。每个部分都通过一个域来访问。例如:www.section1.com,www.section2.com,www.section3.com。当用户从一个URL导航到另一个URL时,我需要保留会话。该应用程序在IIS中是相同的。如何做到这一点?一个应用程序,不同的域:如何保留ASP.NET上的会话?
回答
您需要传递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的价值来劫持会话。但是,如果你对计算机有点熟悉的话,那也不会少。
你可以使用cookie来传递它,仍然在研究如何找出答案。我会重新发布。
**编辑
还有另外一个堆栈溢出问题,看看是否有帮助,315132
它基本上问
我需要分享与两个不同的域之间的SSO信息 cookie,可以这样做在PHP和 如何?
给出的答案是
在这两个领域,将图像或从 其他域拉 其他网页元素。使用 的URL通知域A上的用户X为 的其他域,并让域B 将该用户ID与其系统上的该用户 相关联。
正确执行 有点复杂,但如果你认为它通过 它会工作得很好。
Vinko指出在评论 (谢谢!),我不应该把它 理所当然地认为你了解所涉及的 安全隐患。如果这 信息的任何值给任何人的, 那么你应该确保您使用 适当的加密,认证等 避免释放敏感 信息,避免各种 攻击(重播,中间人, 等) 。这不应该太过于繁琐 既然您控制了这两个网站,并且 您可以选择一个安全密钥 两者,因为通过这个 特殊URL通信仅在 两个服务器之间。请记住它。
用户是Adam Davis。
除非您进行一些自定义设置,否则会话特定于应用程序,无论您使用的会话模式如何。 Here's an article讨论如何自定义SQL会话,以便您可以跨多个应用程序使用会话。
您应该首先将sessionState从“InProc”更改为StateServer或SqlServer,确保所有站点(域和服务器)上的MachineKeys都相同,然后设置相关的后端系统以捕获状态信息。
更多信息,请访问:
如果您有多个域(而不仅仅是子域,这是比较容易),你会这样做比你想要的更复杂,因为你不能在不同的域之间共享cookie。
通常的解决方法是在由asp.net页面(或HttpHandler,如果你喜欢)提供的其他域上嵌入链接图像。该页面应该包含具有唯一标记的查询字符串和该数据的哈希版本,并附加一些共享密钥。然后,该页面将在适合该域的响应上设置一个cookie,以将自己与适当的数据关联起来。它通常会提供1x1的透明图像作为响应。通常,您只需在登录到其中一个网站时执行此操作。
- 1. 为一个Rails应用程序使用多个域名时保留会话
- 2. 一个rails应用程序,两个域,每个不同的会话
- 3. 不同的应用程序共享相同的ASP.Net会话Cookie
- 4. 如何在混合应用程序中保留会话?
- 5. 跨多个Android应用程序保留登录会话
- 6. 从另一个ASP.NET应用程序保持相关的ASP.NET应用程序的会话
- 7. 当两个相同的应用程序在同一个域上工作时,正确启动会话的方式
- 8. asp.net在一个域名上的两个应用程序
- 9. 在不同的网站上显示一个ASP.net应用程序
- 10. 如何在每个会话上保持相同的顺序?
- 11. 访问同一服务器上的PHP应用程序后,ASP.NET应用程序的会话超时
- 12. Asp.net会话:两个不同的用户可以访问同一个会话
- 13. 如何为每个用户会话保留不同的购物车时间
- 14. 如何提供来自同一个域的两个不同应用程序
- 15. 在Objective-C应用程序中保留会话ID
- 16. 构建后在Web应用程序中保留会话变量
- 17. 在struts2应用程序中保留会话信息
- 18. 如何确保会话状态不托管在同一台服务器上的应用程序之间共享
- 19. 同一会话,不同的域,设置会话ID
- 20. 如果我的asp.net应用程序产生一个进程,该进程是否在asp.net应用程序运行的同一个应用程序域内运行?
- 21. 如何在php中为所有不同会话保留一个简单变量?
- 22. 在iOS应用程序上登录并使用Rails进行会话保留
- 23. 会话Symfony2不保留值
- 24. 会话不保留数据
- 25. 在本地主机上运行时,Asp.net应用程序突然不再保留会话
- 26. 在同一个域中有两个不同的会话
- 27. 如何共享两个CodeIgnitor应用程序之间的会话在同一个域中
- 28. 如何保留应用程序数据?
- 29. 如何处理ASP.NET WebForms应用程序中的NHibernate会话?
- 30. ASP.NET有没有办法将应用程序状态保存为不同服务器上的会话状态?
这不会自动允许跨域的会话。这是一个浏览器问题,它不会尝试使用域之间的相同会话。然而,在stateserver或sqlserver中使用会话允许在应用程序之间或甚至多个web服务器之间共享会话。然而提交者正在使用相同的应用程序,所以InProc很好。 – jishi 2010-03-18 17:50:17