2009-12-10 182 views
2

我正在使用HttpWebRequest登錄到網站並獲取會話cookie。我的應用程序刮擦了某些頁面,最終變爲空閒狀態,導致會話死機。保持會話活着C#

什麼是防止這種情況的好方法 - 只是好奇 - Web瀏覽器如何做到這一點?

+2

瀏覽器中的會話*也*超時。你是什​​麼意思:「瀏覽器怎麼做?」? – 2009-12-10 15:33:22

+0

這可能是有用的:http://www.codeproject.com/KB/session/Session_Defibrillator.aspx – wprl 2010-02-01 21:32:56

回答

3

瀏覽器本身並不這樣做。如果Web App本身支持它,它們只會這樣做。例如,可能會有一些JavaScript每隔30秒左右發出一次AJAX請求,向服務器發送「keep-session-alive」類型的請求,然後該請求會更新其狀態信息以反映「最近的活動「現在是,並因此阻止會話超時。

然而,在上面的例子中,「客戶」,即HTML/JavaScript的瀏覽器,而「服務器」將被寫入在一起,因此,這種類型的功能,內置的。

如果你不負責服務器端的應用程序,因此不能自己建立「保持活動」功能,你最好的辦法是要麼物理地訪問網頁,瀏覽所有的JavaScript以尋找可能「保持活力」代碼(在他們可能使用的任何js框架中查找SetTimeout,SetInterval或相關方法)。當然也有可能沒有任何這樣的功能,在這種情況下,最好的辦法是簡單地「刷新」你在網頁(即再次發送相同的請求)

1

你不能阻止它,除非你通過以特定的固定時間間隔(比如每10-15分鐘)請求特定網站資源來保持會話活動。

+0

同意,只是不斷調查網站。 – 2009-12-10 15:42:23

0

客戶端: 呼叫服務器的每x分鐘,只要確定它不太經常。最好是去剛下會話超時值:

(Javscript/jQuery的)

$(function() { 
     setInterval(function() { $.post("/KeepSessionAlive.ashx", null, null); }, 60000); 
    }); 

服務器端: 在服務器上的KeepSessionAlive文件,你寫的東西到會話,fe:

context.Session["KeepSessionAlive"] = DateTime.Now;