2011-02-06 67 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,则无论这些请求的频率如何,这些请求都不会维护会话。