Visual Studio 2015和IIS Express更新每个请求的会话ID

时间:2016-08-23 08:12:16

标签: asp.net session iis iis-express

我的WebForms项目存在问题,即每次请求都会更新会话ID。我的标准IIS上不会出现此问题,因此我认为这是我的开发设置的本地问题。

为了进行测试,我只是使用以下代码创建了一个.aspx页面:

<%: HttpContext.Current.Session.SessionID %>

如上所述,当我在本地刷新此页面,运行Visual Studio 2015和IIS Express时,每次请求都会获得一个新的会话ID。 (调试,检查会话内容以及所有内容都会产生相同的结果。)

你认为这是怎么回事?

(我已经看到声称浏览器链接功能可能会导致类似的问题。我不明白这是怎么回事,但仍尝试禁用它,重新启动Visual Studio等等,但无济于事。)

2 个答案:

答案 0 :(得分:1)

这次我会回答我自己的问题:

当进一步检查会话cookie没有“坚持”的原因时,检查响应头我突然意识到由于某种原因服务器试图将会话cookie设置为“安全”:

Set-Cookie:ASP.NET_SessionId=lgkbje1igeprk3u53dsfbvtg; path=/; secure; HttpOnly

虽然这本身并不是一件坏事,但在我的开发设置中却出乎意料。我没有通过https运行请求,因此会话cookie被删除。

在这种情况下的罪魁祸首是web.config,我曾在那里找到:

<httpCookies httpOnlyCookies="true" requireSSL="true" />

这对我来说有点令人尴尬,但我认为这对未来的某个人有所帮助,认识到观察到的行为(每个请求的新会话)可能来自于尝试将会话cookie设置为“安全” “没有安全连接,即https

[编辑] 回复有关不同环境的理想设置的评论中的问题:

我认为您不能说本地,测试或登台环境有“理想”设置,因为这完全取决于您对每个环境的需求。

谈论生产环境的“理想”设置,或者像你说的那样“活着”,也许不那么随意;对于ASP.NET,我个人总是使用:

<httpCookies httpOnlyCookies="true" requireSSL="true" />

为了扩展一般的安全性主题,我还要确保设置了HSTS HTTP标头。同样,实现这一目标的确切方法取决于您的上下文,例如您使用的平台等。在较旧的ASP.NET应用程序中,AFAIK没有更好的方法,我会在Global.asax中添加一些内容。的:

protected void Application_BeginRequest(Object sender, EventArgs e) {
    if(Request.IsLocal)
        return;

    switch (Request.Url.Scheme) {
        case "https":
            Response.AddHeader("Strict-Transport-Security", "max-age=300");
            break;
        case "http":
            var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
            Response.Status = "301 Moved Permanently";
            Response.AddHeader("Location", path);
            break;
    }
}

当然,还有其他与安全相关的HTTP标头,以及您应该更改应用程序和Web服务器的默认配置的其他信息。以下是该主题的一些链接:

此外,我会查看machine.config并设置:

<deployment retail="true" />

此设置应确保关闭调试模式并打开自定义错误,因此您不会意外泄漏堆栈跟踪和内容等内容。这是关于这个主题的博客 - 另一个很棒的特洛伊亨特作品,就像上面链接的一样,但仍然相关:

OWASP Top 10 for .NET developers part 6: Security Misconfiguration - 特洛伊亨特

答案 1 :(得分:1)

已解决将此值添加到web.config

<sessionState cookieless="UseCookies" cookieName="AppNameSession"></sessionState>