2013-08-05 176 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没有效果。 –