2013-08-05 174 views
1

我有一個單頁網站,大量使用AJAX。用戶操作全部以例如形式被髮送到URL。 requests.aspx?obid=1&verb=shownotesASP.Net會話超時問題

我的託管服務提供商的會話過期設置爲5分鐘,這太短。我正在努力讓他們改變這一點。

我曾嘗試使用setInterval每30秒向服務器發送一次請求,但會話在5分鐘後仍然過期。 setInterval請求中的信息看起來就像用戶請求,但我猜服務器沒有被愚弄。

我已禁用與jQuery緩存。

我不使用cookies。

難道是setInterval請求被緩存在服務器本身上嗎?我應該追加一個隨機字符串到這個請求嗎?

確保會話保持活動狀態的最佳方法是什麼?

編輯:下面是來自Chrome開發人員工具複製請求頭:

的典型用戶操作請求頭:

POST /requests.aspx?obid=0&otid=203&verb=display&param1=0&param2=0&param3=0 HTTP/1.1 
Host: applify.co.za 
Connection: keep-alive 
Content-Length: 0 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://applify.co.za 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
DNT: 1 
Referer: http://applify.co.za/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ASP.NET_SessionId=4li3ilr0bsb5yc1uf5oy1pd1 

請求頭爲setInterval行動:

POST /requests.aspx?obid=0&otid=545&verb=donothing&param1=&param2=&param3= HTTP/1.1 
Host: applify.co.za 
Connection: keep-alive 
Content-Length: 0 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://applify.co.za 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
DNT: 1 
Referer: http://applify.co.za/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ASP.NET_SessionId=4li3ilr0bsb5yc1uf5oy1pd1 

兩個看幾乎相同的。

+0

您使用表單身份驗證嗎? – Abhitalks

回答

0

你可以嘗試添加時間戳後綴如:

(通過JS)

var t='requests.aspx?obid=1&verb=shownotes'; 
t+='&'+(1*new Date()) 

繼續請求....

或通過C#

...requests.aspx?obid=1&verb=shownotes&t=<%=DateTime.Now.Ticks%>

ps發佈您設置的時間間隔碼,以便我們可以看到它。

NB

  • jQuery的阿賈克斯cache屬性,該屬性是true默認(恕我直言)

    嘗試將其設置爲false。它會添加一個時間戳。

  • 你可以發佈aspx代碼的代碼嗎? (我想看看你是否在那裏做ClearHeaders或Response.End ....

+0

我已經試過'$ .ajaxSetup({cache:false});'。將嘗試時間戳後綴。 –

+0

@CorneBeukes看着chrome developertool酒吧,爲標題和張貼在您的問題 –

+0

我編輯帖子以顯示典型的請求。 –

0

你可以覆蓋你的網站會話超時。config:

<system.web> 
    <sessionState timeout="60" /> 
</system.web> 

因爲您沒有使用cookies,您可能需要特別指定cookieless=true

+0

超時由主機提供商控制,並且在web.config中設置sessionstate沒有效果。 –