会话超时怪异

时间:2011-02-06 17:51:54

标签: ajax iis session asp-classic session-timeout

我有一个人们登录的主站点。这是IIS,标准会话时间超过20分钟。

有一个实时聊天工具,它出现在同一个域的弹出窗口中。没有涉及https。

尽管聊天窗口每隔几秒就向服务器发出一次Ajax调用(并且总是至少得到一条数据),每当登录用户发布消息时,也会通过Ajax将数据发送到服务器20分钟后超时,好像什么都没发生一样。

为什么会发生这种情况以及如何阻止它的任何想法,因为在与服务器进行主动通信时,它们在站点中被注销显然是不合理的。

3 个答案:

答案 0 :(得分:1)

我决定使用cookie而不是网站的会话变量来检查他们是否已登录。由于这是一个聊天应用,他们第一次打开聊天页面时会有一个小时。 /> 每次他们发布消息时都会重置为一小时后。

这样海报就会保持登录状态,并且潜伏者会被赶走。

载入时:

response.cookies("chatuser")=nickname
response.cookies("chatuser").expires=now()+0.5

发布消息:

response.cookies("chatuser").expires=now()+0.5

答案 1 :(得分: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稍稍过期也是一个好主意 会话超时。这意味着用户在遇到空的Session数据之前就会被启动,如果是相反的话。

答案 2 :(得分:0)

您实际上是否在发送AJAX请求时发送了任何Cookie信息?

如果AJAX请求不包含ASP放置在cookie中的会话ID,那么无论会话频率如何,请求都不会维持会话。