簡體   English   中英

停止重用ASP.NET_sessionId

[英]Stop reusing the ASP.NET_sessionId

我有一個(不是現場)網站的奇怪問題,我不知道問題的原因是什么。

采取這種情況:

  1. 我使用userA登錄該站點。
  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. UserB登錄。

  5. 我將step2中的值粘貼到新的userB cookie值中
  6. 我導航到該網站的另一頁
  7. 我現在以userA身份登錄

我現在的問題:

  • 這是預期的行為嗎? 如果沒有,這個問題的原因是什么?
  • 有沒有辦法殺死服務器端的會話? 在我的web.config中,會話超時設置為10分鍾,並且站點成功注銷,但是當與任何用戶重新登錄並復制“舊”cookie數據時,即使在48小時后,會話似乎仍然存在。
  • 我還沒有嘗試過,但如果我在另一個IP地址上執行這些步驟,我可以期待相同的行為嗎? 有辦法阻止這個嗎?

問候!

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

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

如果您擔心cookie被盜 - 請先檢查您使用https和僅限http的cookie :)如果您需要加強安全性,請注意基於IP的cookie保護會導致可用性問題 - 例如當您搬家時從一個wifi到另一個用筆記本電腦/手機 - 你已經退出,還有其他東西你可以用作瀏覽器指紋 - 比如用戶代理字符串等。

暫無
暫無

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

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