8

我正在一个网站上工作,该网站需要在同一域上的 cms 应用程序和在线商店应用程序之间共享会话,例如。

mydomain.com

store.mydomain.com

我已经取得了一些进展,它适用于我的本地构建

localhost/cms

localhost/store

基本上我已经完成了这篇文章中的建议

http://blogs.msdn.com/toddca/archive/2007/01/25/sharing-asp-net-session-state-across-applications.aspx

并破解了 TempGetAppID 存储过程以返回相同的应用程序 ID (1)。这似乎有效,因为它创建了具有像“abv5d2urx1asscfwuzw3wp4500000001”这样的 id 的会话,这是我所期望的。

我的问题是,当我将它部署到我们的测试环境时,当我在两个站点之间导航时,它会创建一个新会话。因此,当我在 cms 站点上启动会话时,如果我导航到商店,它会创建一个新会话。这些在 IIS7 中设置为 2 个不同的网站。

在两个站点的 web.config 文件中, 和 元素都相同,如下所示(减去敏感信息)

有没有人知道为什么这可能不起作用?我在 2 个站点之间共享表单身份验证,并且效果很好。任何帮助或想法将不胜感激!

非常感谢

戴夫

4

2 回答 2

7

看来我们遇到的问题是会话 cookie 域在 2 个应用程序上的设置不同。这意味着每个应用程序都会生成自己的 sessionId。

我们添加 <httpCookies domain=".ourdomain.co.uk" /> 到我们的 web.config 中,这似乎已经解决了。感谢您的帮助,希望这对将来的其他人有所帮助。

于 2010-03-17T10:37:23.520 回答
6

使用会话 ID 作为键,将所有会话数据保存在 SQL 服务器上。然后使用包含指向的会话 ID 的 cookie,.mydomain.com以便它在两个子域上都可用。

这篇15 秒的文章涵盖了这个主题,甚至展示了一种跨完全不同的域共享会话的技术。

于 2010-03-08T17:33:14.387 回答