2011-02-06 125 views
0

我有一個主要的網站登錄人。這是IIS和20分鐘內的標準會話時間。會話超時奇怪

有一個實時聊天工具出現在同一個域中的彈出窗口中。沒有https參與。

儘管聊天窗口每隔幾秒就會向服務器發送一次Ajax調用(並且總是至少返回一個數據),但每當登錄用戶發佈消息時也會通過Ajax將數據發送到服務器, 20分鐘後超時,好像什麼都沒有發生。

任何想法爲什麼會發生這種情況,以及如何阻止它,因爲他們在與服務器進行主動通信時註銷站點顯然是非理性的。

+0

您使用什麼機制來驗證並保持用戶登錄? – Kev 2011-02-06 21:53:41

+0

AJAX在瀏覽器上有緩存的惡習,嘗試通過在每個請求上發送唯一的隨機值來破解它,看看它是否有幫助。 – 2011-02-08 07:57:00

回答

0

聽起來就像您正在使用表單身份驗證一樣,並且身份驗證Cookie也將過期。

每次嚮應用程序發送請求並且當前會話仍然有效時,會話超時將被更新。

表單身份驗證可以以兩種方式工作。您可以讓用戶登錄固定時間或使用滑動到期。例如:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="15" /> 
</authentication> 

上面套形式認證超時到15分鐘,但也可以使滑動過期(slidingExpiration="true"提供的用戶再次訪問15分鐘的cookie壽命將會延長,並且用戶將保持驗證內的位點。 。

如果slidingExpiration="false"則用戶將在15分鐘後拉開序幕無論何時,他們上次訪問該網站。

這也是有窗體身份驗證cookie略早於 會話超時到期了一個好主意。 Ť他的手段用戶在遇到空會話數據之前就會被踢掉,如果相反的話。

+0

這段代碼去哪裏?聊天頁面不使用任何表單提交,但使用Ajax獲取表單字段數據併發布。它也是由ajax調用的ASP腳本,用於檢查會話是否過期,以及是否發回了數據,彈出警告,告訴用戶他們已經註銷。 Ajax使用的實際ASP腳本不需要用戶登錄,因此它不會產生錯誤。 – derekcohen 2011-02-06 21:36:50

1

我決定要做的是使用cookie而不是網站的會話變量來檢查他們是否已登錄。由於這是一個聊天應用程序,他們首次打開聊天頁面時會得到一個小時。
每次他們發佈消息時,都會重置爲一小時。

這樣,海報保持登錄狀態,潛水者會被撞倒。

負載:

response.cookies("chatuser")=nickname 
response.cookies("chatuser").expires=now()+0.5 

在發佈一條消息:

response.cookies("chatuser").expires=now()+0.5 
0

你實際發送您的AJAX請求任何cookie信息?

如果AJAX請求不包含由ASP放置在Cookie中的會話ID,則無論這些請求的頻率如何,這些請求都不會維護會話。