2015-07-28 47 views
1

看來,我可以隨時閱讀SessionID,即使目前沒有Cookie!ASP.NET:即使沒有cookie,我爲什麼可以讀取會話cookie?

Dim SessionID As String = Request.Cookies("ASP.NET_SessionId").Value 

此代碼總是會返回一個值,大概是由舉行的ID IIS服務器端。

只有在存儲會話信息的請求發生時纔會生成cookie。

這是爲什麼?

和...

如果我使用的會話狀態服務器將SessionID曾經從cookie SessionID不同,其優先如果的ID的一個丟失或重置?

編輯

如果app_pool復位。必須創建新的會話ID纔會導致會話cookie也被更新?由於這可能會給已經登錄的用戶的潛在衝突

+0

當會話cookie丟失(刪除,到期)時,asp.net將生成另一個持有sessionId,以便在任何時候,您都有一致的方式來引用會話(「某事」)並獲得預期行爲。 – sarepta

回答

0

當用戶訪問由供電的網站ASP.NET IIS生成一個SessionID來唯一地標識用戶會話。

如果網站使用cookie:

<sessionState mode="StateServer" cookieless="UseCookies"/> 

會當存儲會話信息的請求是通過網頁製作只生成一個名爲ASP.NET_SessionId的cookie。如果沒有會話信息存儲,cookie將不會被創建,但用戶仍然有一個活動的SessionID

SessionID讀取IIS當沒有cookie存在時。

服務器上的SessionID始終優先,並且會在創建新的存儲cookie信息的請求時更新會話cookie。

0

,網站和會議在默認情況下打開ASP.Net的用戶訪問創建的SessionID每次除非您指定的cookie的選項:

如果您使用的是會話狀態服務器,則所有Web服務器上的SessionID應該相同,否則您將無法找到同一用戶。

如果ID丟失或重置,狀態服務器將簡單地創建一個新的cookie,並使用新的SessionID寫入一個新的cookie,舊的cookie在到期時間後將被刪除。

+0

這不完全正確。你可以自己測試一下。當用戶訪問網站時會產生一個'SessionID',但是直到存儲會話信息的請求被生成纔會生成'cookie'。如果沒有會話信息存儲,則不會創建cookie,但用戶仍然具有活動的sessionid。 – Obsidian