我有一个主要的网站登录人。这是IIS和20分钟内的标准会话时间。会话超时奇怪
有一个实时聊天工具出现在同一个域中的弹出窗口中。没有https参与。
尽管聊天窗口每隔几秒就会向服务器发送一次Ajax调用(并且总是至少返回一个数据),但每当登录用户发布消息时也会通过Ajax将数据发送到服务器, 20分钟后超时,好像什么都没有发生。
任何想法为什么会发生这种情况,以及如何阻止它,因为他们在与服务器进行主动通信时注销站点显然是非理性的。
我有一个主要的网站登录人。这是IIS和20分钟内的标准会话时间。会话超时奇怪
有一个实时聊天工具出现在同一个域中的弹出窗口中。没有https参与。
尽管聊天窗口每隔几秒就会向服务器发送一次Ajax调用(并且总是至少返回一个数据),但每当登录用户发布消息时也会通过Ajax将数据发送到服务器, 20分钟后超时,好像什么都没有发生。
任何想法为什么会发生这种情况,以及如何阻止它,因为他们在与服务器进行主动通信时注销站点显然是非理性的。
听起来就像您正在使用表单身份验证一样,并且身份验证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略早于 会话超时到期了一个好主意。 Ť他的手段用户在遇到空会话数据之前就会被踢掉,如果相反的话。
这段代码去哪里?聊天页面不使用任何表单提交,但使用Ajax获取表单字段数据并发布。它也是由ajax调用的ASP脚本,用于检查会话是否过期,以及是否发回了数据,弹出警告,告诉用户他们已经注销。 Ajax使用的实际ASP脚本不需要用户登录,因此它不会产生错误。 – derekcohen 2011-02-06 21:36:50
我决定要做的是使用cookie而不是网站的会话变量来检查他们是否已登录。由于这是一个聊天应用程序,他们首次打开聊天页面时会得到一个小时。
每次他们发布消息时,都会重置为一小时。
这样,海报保持登录状态,潜水者会被撞倒。
负载:
response.cookies("chatuser")=nickname
response.cookies("chatuser").expires=now()+0.5
在发布一条消息:
response.cookies("chatuser").expires=now()+0.5
你实际发送您的AJAX请求任何cookie信息?
如果AJAX请求不包含由ASP放置在Cookie中的会话ID,则无论这些请求的频率如何,这些请求都不会维护会话。
您使用什么机制来验证并保持用户登录? – Kev 2011-02-06 21:53:41
AJAX在浏览器上有缓存的恶习,尝试通过在每个请求上发送唯一的随机值来破解它,看看它是否有帮助。 – 2011-02-08 07:57:00