如何在 http 和 https 之间共享 asp.net 会话

Posted

技术标签:

【中文标题】如何在 http 和 https 之间共享 asp.net 会话【英文标题】:how can I share an asp.net session between http and https 【发布时间】:2010-10-08 17:27:16 【问题描述】:

我读到在 https 连接下运行的页面无法与在常规 http 下运行的另一个页面(或相同的页面)共享 InProc 会话(基于 cookie)。我的网站在 Server 2003、IIS 6 和 .Net 2.0 上运行。

经过一些实验,似乎在通过 https 连接时在会话中存储数据的页面可以随后访问数据,即使在普通 http 下运行也是如此。

那么,是否有可能或者我应该去寻找 SSL 配置中的缺陷?

【问题讨论】:

【参考方案1】:

来自MSDN:

当用户来回移动时 在安全和公共区域之间, ASP.NET 生成的会话 cookie(或 如果您启用了无 cookie,则为 URL 会话状态)与他们一起移动 明文,但身份验证 cookie 永远不会被忽略 未加密的 HTTP 连接只要 因为设置了 Secure cookie 属性

所以基本上,如果 Secure 属性设置为 false,则 cookie 可以通过 HTTP 和 HTTPS 传递。

我通过将其添加到我的Global.asax 文件中避免了这个问题:

void Session_Start(object sender, EventArgs e) 

    if (Request.IsSecureConnection) Response.Cookies["ASP.NET_SessionID"].Secure = false;

这意味着如果会话 cookie 是通过 HTTP 创建的,则只能通过 HTTPS 访问。

【讨论】:

关闭此功能有什么安全隐患?【参考方案2】:

IIS 设置 在 IIS 属性窗口中,在 ASP 选项卡 -> 会话属性下,有一个“安全连接上的新 ID”的设置

我通过将其设置为 false 为自己解决了这个间歇性问题。

【讨论】:

这似乎在 IIS7 中消失了——或者我只是不清楚在哪里可以找到它。这是每个站点还是全局到服务器? @chris-moschini 在 IIS 7 中,“ASP.NET”下有一个“会话状态”图标,所以如果您正在寻找,那么您来对地方了——是​​的,你是对的;该设置已消失。【参考方案3】:

到目前为止,搜索问题并没有引起太多关于它的讨论,仍在寻找。

编辑:好的,现在找到一些东西。

是的,如果两组页面都在同一个应用程序/网站中,它似乎可以正常工作。

所以我会继续前进,感到放心。

【讨论】:

【参考方案4】:

如果上述任何解决方案都不起作用,请尝试此操作。经过几天的研究,我已经破解了这个问题。

app.UseCookieAuthentication(new CookieAuthenticationOptions

    ...
    ...
    CookieSecure = CookieSecureOption.Never
);

【讨论】:

以上是关于如何在 http 和 https 之间共享 asp.net 会话的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET:如何在 Web 应用程序之间共享资源(成员资格、库)

如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?

如何在工作室中的多个 ASP.Net 项目之间共享内容文件夹?

在同一域的两个网站之间共享 cookie

在 WPF、Silverlight 和 ASP.NET 之间共享一个公共 DAL

IIS 在 ASP.NET Core 和 ASP.NET 应用程序之间共享 cookie