2013-01-09 67 views
4

我是asp.net的新手。我登錄網站併爲用戶創建會話,將此會話視爲s1。 添加cookie(c1)到客戶端網站,過期3天。瀏覽器關閉並重新打開後維護同一會話

假設如果我關閉瀏覽器沒有註銷,並再次使用相同的網址,然後我發現會議是空的,但我得到cookie(C1),然後我創建了一個新的會話。但會話s1仍佔用服務器上的內存。這意味着這次兩個會話在同一臺服務器上佔用內存。

我想使用會話s1與cookie(c1) - 是否有可能。或者如果第二次請求到來,我想刪除會話s1。

我使用的代碼是:

.ASPXFORMSAUTH到期:用表單驗證

if (Session["UserInfo"] != null) 
    { 
     // code 
    } 
    else 
    { 
     HttpCookie HT = Request.Cookies["User"]; 
     if (HT != null) 
     { 
      Session["UserInfo"] = HT["UserName"]; //Here new session is created while previous is already exist on server 
     } 
     else 
     { 
      //code 
     } 
    } 
+0

你能提供更多的信息嗎?你正在使用什麼類型的會話(InProc,Sql,State服務)?你確定你所說的cookie是會話相關的,而不是認證cookie?通常,您會在瀏覽器關閉時設置會話服務器端超時並且客戶端cookie過期。 – semao

+0

我正在使用inproc會話。這裏我explicitaly爲下次登錄創建cookie,我想重用服務器內存,因爲會話已在服務器上創建,爲什麼我應該再次創建新的會話。 –

回答

1

IE產生對每個請求一個新的會話ID。所以當你關閉你的瀏覽器時,舊的會話標識會丟失,所以瀏覽器用新的會話標識發送請求。這就是爲什麼你無法獲得會話的價值。

但是在服務器上佔用服務器內存,會話超時後服務器會清除它。

Firefox在每個請求中發送具有相同會話ID的請求,即使您關閉了瀏覽器選項卡,您也可以獲得會話ID。

+1

會話ID由服務器創建,而不是客戶端(瀏覽器)。 – jor

+0

會話的概念完全是服務器端。 –

0

典型ASP配置餅乾30分鐘 ASP.NET_SessionId到期:在會話的結束

所以當你關閉瀏覽器時,你將會失去會話,但你不會被註銷。 當您重新打開瀏覽器時,只有ASP.NET_SessionId已過期。

如果你想創建持久的會話cookie使用:

Create Persistent ID Cookies

相關問題