2008-12-03 18 views
2

我們有一個搜索結果頁面,用戶可以通過多種方式點擊。 90%的方法將建立一個「搜索標準」會話對象,結果頁面將用來檢索搜索結果。ASP.NET會話 - 如何知道由於到期或初次訪問而導致會話是否爲新會話?

當未找到會話對象時,我們通常會向用戶顯示「無效搜索」消息,併爲他們提供指向主搜索頁面的鏈接。

例外情況是用戶點擊一個包含搜索結果頁面的網頁,因爲它是默認頁面(我們使用.NET的主題爲我們的網站提供私有標籤,並使用我們的附屬公司的顏色和徽標對其進行蒙皮)。如果搜索結果頁面是網站的默認頁面,則會在沒有會話條件時執行特殊搜索。

這在我們的測試中運行良好,但我們想要處理一個邊緣案例:當某人在搜索結果頁面上的某個會話過期時(他們來自搜索頁面),然後單擊結果的下一頁,他們將得到這個特殊的搜索,而不是'過期的會話'消息。

這是我們使用的基本格式,其中searchCriteria是從會話中設置的。

if (searchCriteria == null) 
{ 
    if (/*Check if this is the default url for this site*/) 
    { 
     //Preform special search 
    } 
    else 
    { 
     //Display 'session expired message' 
    } 
} 

有沒有辦法,我們可以在內部檢查會話是否塊,看看如果用戶的會話新由於現有的過期?或者瀏覽器在會話過期時丟棄會話cookie?

瀏覽器與瀏覽器有區別嗎?有些會將過期的會話cookie返回給服務器,而其他會在到期時刪除它們嗎?還是一致?

回答

5

這是一個很好的article它是基於this one。我想你會在這裏找到你的答案(特別是第二篇文章的第2頁)

+0

謝謝!這些文章應該有所幫助。 – Jeff 2008-12-04 14:10:42

1

所有的瀏覽器都會返回過期的會話cookie。他們會這樣做,直到瀏覽器重新啓動或由服務器響應重寫。

bnkdev的答案使用這個事實來檢測新的vs過期,看看cookie是否已經設置。這很簡單,很可能適用於你,但它只適用於cookies用於會話ID。它不適用於無Cookie會話。

此外,您應該從sessionState配置元素的cookieName屬性中獲取它,而不是硬編碼「ASP.NET_SessionId」。

+0

很高興知道瀏覽器都做到了這一點,並返回cookie。謝謝! – Jeff 2008-12-04 14:16:45