我有一个人们登录的主站点。这是IIS,标准会话时间超过20分钟。
有一个实时聊天工具,它出现在同一个域的弹出窗口中。没有涉及https。
尽管聊天窗口每隔几秒就向服务器发出一次Ajax调用(并且总是至少得到一条数据),每当登录用户发布消息时,也会通过Ajax将数据发送到服务器20分钟后超时,好像什么都没发生一样。
为什么会发生这种情况以及如何阻止它的任何想法,因为在与服务器进行主动通信时,它们在站点中被注销显然是不合理的。
答案 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,那么无论会话频率如何,请求都不会维持会话。