2017-06-09 57 views
0

我對一個(現場還沒有)網站有一個奇怪的問題,我不知道問題的原因是什麼。停止重用ASP.NET_sessionId

採取這樣的場景:

  1. 我登錄與用戶A在網站上。
  2. 我打開F12並複製ASP.NET_SessionId和.AspNet.ApplicationCookie的Cookie值
  3. UserA註銷。這個代碼塊被執行。

    HttpContext.GetOwinContext().Authentication.SignOut(); 
    
    Session.Clear(); 
    Session.Abandon(); 
    Session.RemoveAll(); 
    
    Request.Cookies["ASP.NET_SessionId"].Expires = DateTime.UtcNow.AddDays(-1d); 
    Response.Cookies["ASP.NET_SessionId"].Value = ""; 
    Response.Cookies.Add(Request.Cookies["ASP.NET_SessionId"]); 
    
    return Redirect($"{AppSettings.PublicLandingPage}/loggedout"); 
    
  4. 用戶B日誌中

  5. 我粘貼到第二步用戶B新的cookie的值值
  6. 我瀏覽到該網站
  7. 我的其他網頁現在登錄爲用戶A

的問題,我現在有:

  • 這是預期的行爲?如果不是,這個問題的原因是什麼?
  • 有什麼辦法在服務器端殺死會話嗎?在我的web.config中,會話超時設置爲10分鐘,站點成功註銷,但是當重新登錄任何用戶並複製'舊'cookie數據時,會話仍然似乎仍然活着,即使在48小時後。
  • 我還沒有嘗試過,但如果我在另一個IP地址上執行這些步驟,我是否可以期待相同的行爲?有沒有辦法阻止這個?

問候!

回答

2

您正在混合身份驗證和會話 - 這些都是單獨的概念 - 您可以擁有活動會話而無需進行身份驗證或在沒有活動會話的情況下進行身份驗證。

至於爲什麼你認證 - 這是由設計。身份驗證Cookie包含所謂的票證 - 通常由加密的用戶ID,時間戳(時間戳到期後的Cookie無用)和其他信息組成。服務器內存中沒有任何內容存儲 - 因此您可以擁有負載均衡器/ Web服務器場,並且用戶可以無縫驗證身份。 Cookie(基於加密的時間戳)可以使用絕對到期或滑動到期。如果使用滑動到期服務器(一旦瀏覽器發送請求和滑動到期期限的一半已過),則用新的時間戳替換auth cookie。

如果您擔心cookie盜用 - 請先檢查您是否使用https和http-only cookies :)如果您需要加強安全性,請務必注意,基於IP的cookie保護可能會導致可用性問題 - 例如何時您正在使用筆記本電腦/手機從一臺wifi移動到另一臺 - 您已註銷,並且還有其他一些可用作瀏覽器指紋的內容 - 例如用戶代理字符串等。

+0

Hi Ondrej!你是絕對正確的。會話與認證部分無關。我們目前有https https專用cookie。 不使用基於IP的cookie是一個好評。 我仍然無法得到我的頭唯一的東西是加密用戶ID的票。看起來合乎邏輯的是,只要用戶登錄,票證在時間戳期間有效,但是當用戶註銷時,我希望這張票據將失效,因此您不能再使用該票證了?但正如你所提到的那樣,這是不可能的,因爲沒有任何東西存儲在服務器端...... – Miscode