【问题标题】:Sharing ASP.Net session between 2 websites on IIS8 does not work在 IIS8 上的 2 个网站之间共享 ASP.Net 会话不起作用
【发布时间】:2015-08-02 03:02:52
【问题描述】:

我需要在同一个 IIS 上的 2 个网站之间共享 asp.net 会话。

  • 我创建了一个自定义会话数据库并劫持了存储过程以返回相同的 appID,而不管应用程序或 url。

  • 我在 web.config 中为 db 创建了一个连接字符串:

  • 然后我定义了会话状态:

我在我的 Win7 机器上使用 IIS7 开发了网站,并且登录系统运行良好。我可以从 1 个站点登录,然后转到其他站点并保持登录状态。

我将 2 个站点移至 Web 服务器(带有 IIS8.5 的 Windows 2012)并且共享会话不起作用。站点根本不共享会话。我在一个站点上设置了一个会话值并尝试在另一个站点上查看它,并且会话值返回为空。同样的测试页面也适用于 IIS7。

有谁知道为什么 IIS8.5 无法在 IIS7 上运行?

【问题讨论】:

  • 会话 ID 存储在 cookie 中。默认情况下,由于安全原因,cookie 不能跨域共享,除非它们是子域。他们的网址是什么?
  • 它们是子域。即:site1.domain.com & site2.domain.com
  • 您使用的是哪种身份验证方法?你在使用 FormAuthentication 吗?
  • 我解决了这个问题,我稍后会分享解决方案。

标签: asp.net session iis-7 session-state iis-8.5


【解决方案1】:

您需要向两个 Web 配置文件添加相同的机器密钥。

如果进入 system.web 并看起来像这样:

<machineKey validationKey="[your key]" decryptionKey="[dec key]" validation="SHA1" />

如果您使用 Google 搜索,有一些工具会为您创建一个。

您需要此密钥的原因有几个,主要是因为服务器可能有不同的路径到您编码所在的文件夹或不同的 IIS 设置。

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多