【问题标题】:Sharing session state between 2 ASP.NET applications using SQL Server使用 SQL Server 在 2 个 ASP.NET 应用程序之间共享会话状态
【发布时间】:2011-01-25 01:23:31
【问题描述】:

我正在开发一个需要在同一域上的 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 个站点之间共享表单身份验证,并且效果很好。任何帮助或想法将不胜感激!

非常感谢

戴夫

【问题讨论】:

    标签: c# asp.net-3.5 session-state multiple-domains


    【解决方案1】:

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

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

    【讨论】:

    • 这就是跨域而不是会话共享 Cookie 的方法。即使您以某种方式将 cookie 设置在同一域下,应用程序也是不同的。这是一个解决这个问题的页面:velocityreviews.com/forums/…
    • 谢谢,但这是特定于经典 asp 的。我确信有一些方法可以在 asp.net 中实现这一点,而不必从 cookie 中获取会话。但是,如果我错了,我肯定会尝试在我的 asp.net 项目中实现类似的东西。
    • 谢谢日产粉丝,我去看看。
    • 是的,这篇文章不是关于会话的,抱歉... 使用存储在 cookie 中的会话 ID,您可以从两个应用程序访问保存在 SQL-Server 上的会话数据。会话只不过是存储在服务器上的数据,该数据链接到使用会话 cookie 标识的客户端。使用 .Net 处理 cookie 的方式与使用经典 ASP 的方式大致相同,只是您不必编写笨拙的 VBScript :) 也许有一个更优雅的解决方案,如果您找到了请告诉我们。跨度>
    【解决方案2】:

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

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

    【讨论】:

    • 这必须在两个 web.config 文件中完成。非常感谢,这解决了我们的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2023-03-27
    • 2012-12-30
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多