2010-08-19 33 views
8

假設我已登錄到從IIS運行的應用程序。現在我沒有註銷,但關閉了瀏覽器。當我再次訪問應用程序時,它默認爲登錄頁面。 IIS如何識別它是一個新請求並將用戶重定向到登錄頁面?IIS如何識別.NET中的不同會話?

我還有一個問題。假設我沒有關閉瀏覽器,我在登錄時使用了瀏覽器。我打開新的瀏覽器從同一應用程序請求一個頁面。 IIS會認識到這是對應用程序的新請求,並將用戶重定向到登錄頁面。爲什麼它不使用第一個瀏覽器使用的現有會話或cookie?

請不要對我持續的問題感到惱火......我有很大的困惑。 我們說HTTP是一個無狀態協議。一旦請求了頁面,我已經登錄。並且HTTP協議連接將在IIS和瀏覽器之間終止,對吧?然後,我正在瀏覽該登錄的應用程序中的其他頁面。現在IIS可以識別用戶已經登錄到這個瀏覽器。但是當我打開一個新的瀏覽器並請求該應用程序時,IIS如何識別它是一個新的請求?由於HTTP協議斷開連接,它在第一種情況下如何工作?

+0

好的。另外我有另外一個疑問。假設iam沒有關閉我登錄的瀏覽器,並且我打開新的瀏覽器來請求來自同一應用程序的頁面。現在iis如何認識到這是對應用程序的新請求併發送到登錄頁面。爲什麼不能使用第一個瀏覽器使用的現有會話或cookie – Bala 2010-08-19 11:49:30

+0

請參閱我的更新答案。 – cHao 2010-08-19 12:05:23

+0

非常感謝。請找我更新的問題,並幫助我 – Bala 2010-08-19 12:14:41

回答

29

正如你正確說,HTTP本身是無狀態的,並且每個請求是從每一個其他技術上獨立。網站使用的會話是解決這個問題的方法。通常會發生的情況是,服務器存儲它在請求之間維護的任何信息(例如,登錄用戶的用戶名和/或ID),併爲該信息分配一個ID(稱爲「會話ID」)。然後它會通知瀏覽器會話ID,以便瀏覽器在發出另一個請求時可以將ID返回。如果瀏覽器發揮其作用並提供會話ID,則可以根據每個請求檢索,更新存儲的信息等,甚至在無狀態協議上提供某種程度的狀態。

會話通常使用cookie來實現。也就是說,服務器向瀏覽器提供一個帶有會話ID的cookie,瀏覽器將這個cookie與每個請求一起回傳,直到cookie過期或被忘記。一些cookie(所謂的「會話cookie」)不會被保存,並且在瀏覽器關閉時被遺忘。新打開的瀏覽器沒有任何會話cookie可以通過,所以如果服務器使用會話cookie進行會話(它應該),它會認爲用戶還沒有登錄,並且如果他們需要跳轉到登錄頁面

會話cookie通常會在同一個瀏覽器中的標籤之間共享,甚至有時甚至可以由已經運行的瀏覽器的「文件>新窗口」打開的窗口共享,因爲這兩種情況通常會只是該瀏覽器的一部分。但是,如果您從「開始」菜單啓動瀏覽器,或者操作系統允許您啓動程序,則這是一個完整的其他過程 - 而且會話Cookie很少在進程之間共享。

在使用會話的每個請求之後,服務器通常也只會在有限的時間內(在幾秒到幾年的任意位置,取決於服務器和/或站點設置)記住會話。如果瀏覽器傳遞一個對應於該服務器不再記住的會話的cookie,它就會像沒有會話那樣工作。其中,如果您需要登錄,則會再次跳轉到登錄頁面。

+0

非常感謝幫助我的混亂 – Bala 2010-08-20 05:56:15

1

無論您是否登錄,都有傳遞的cookie。它們映射到IIS中的會話。

+0

我同意,但如何IIS知道瀏覽器已關閉,並且當我們再次請求該頁面時,這是一個新請求 – Bala 2010-08-19 11:41:49

+3

@Bala:IIS不知道瀏覽器。這是瀏覽器在關閉時忘記臨時會話cookie(因爲它應該這樣做),所以不能從新實例發送到IIS。沒有cookie =沒有會話。 – 2010-08-19 12:25:22

+0

非常感謝Hans – Bala 2010-08-20 05:56:50