簡體   English   中英

Visual Studio 2015和IIS Express在每個請求上續訂會話ID

[英]Visual Studio 2015 and IIS Express Renews Session ID on Each Request

我的WebForms項目遇到問題,即每次請求都更新會話ID。 在我的標准IIS上不會發生此問題,因此我得出結論,這是我的開發設置中的本地問題。

為了進行測試,我只是使用以下代碼創建了一個.aspx頁面:

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

如前所述,當我在本地運行Visual Studio 2015和IIS Express刷新此頁面時,每個請求都會獲得一個新的會話ID。 (調試,檢查會話內容以及所有這些都不會產生相同的結果。)

您認為這是怎么回事?

(我已經看到聲稱瀏覽器鏈接功能可能會導致類似的問題。我不知道怎么可能,但盡管如此,還是嘗試禁用它,重新啟動Visual Studio,但無濟於事。)

這次我將回答自己的問題:

當進一步檢查會話cookie為什么不“粘貼”的原因時,檢查響應頭時,我突然意識到,由於某種原因,服務器試圖將會話cookie設置為“安全”:

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

盡管這本身並不是一件壞事,但在我的開發設置中卻出乎意料。 我沒有通過https運行請求,因此會話cookie被刪除。

在這種情況下,罪魁禍首是在web.config找到的:

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

這一切都讓我有些尷尬,但是我認為這可能對將來的某人有所幫助,這是因為意識到觀察到的行為(每個請求都帶有新會話)可能來自嘗試將會話cookie設置為“安全”而沒有安全連接,即https

[EDIT]回應評論中有關不同環境的理想設置的問題:

我認為您不能說本地,測試或暫存環境有一個“理想”的設置,因為這完全取決於您對每種環境的需求。

談論生產環境的“理想”設置或您所說的“實時”設置可能不太隨意。 對於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" />

此設置應確保關閉調試模式並打開自定義錯誤,因此您不會意外泄漏堆棧跟蹤等內容。 以下是有關該主題的博客-另一個不錯的Troy Hunt文章,就像上面鏈接的那篇文章-年代久遠,但仍然很相關:

.NET開發人員的OWASP Top 10第6部分:安全性錯誤配置-Troy Hunt

解決了將此值添加到web.config

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM