如何在 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 项目之间共享内容文件夹?