我有一个单页网站,大量使用AJAX
。用户动作都以例如形式发送到URL。 requests.aspx?obid=1&verb=shownotes
我的托管服务提供商的会话到期时间设置为5分钟,这太短了。我正在努力让他们改变这一点。
我已尝试使用setInterval
每30秒向服务器发送一次请求,但会话仍会在5分钟后过期。 setInterval
请求中的信息看起来就像用户请求,但我猜服务器不会被欺骗。
我已使用jQuery
禁用了缓存。
我不使用cookies。
可能是setInterval
请求被缓存在服务器本身上吗?我应该在这个请求中附加一个随机字符串吗?
确保会话保持活力的最佳方法是什么?
编辑:以下是从Chrome开发者工具中复制的请求标头:
典型用户操作的请求标头:
POST /requests.aspx?obid=0&otid=203&verb=display¶m1=0¶m2=0¶m3=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¶m1=¶m2=¶m3= 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 :(得分: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%>
P.S。发布您的设置间隔代码,以便我们可以看到它。
NB
jquery ajax具有cache
属性,默认为true
(恕我直言)
尝试将其设为false
。它会添加一个时间戳。
您可以发布aspx代码的代码吗? (我想看看你是否在那里做ClearHeaders或Response.End ....
答案 1 :(得分:0)
您可以在web.config中覆盖会话超时:
<system.web>
<sessionState timeout="60" />
</system.web>
由于您没有使用Cookie,因此您可能需要明确指定cookieless=true
。