我有一个网页,你需要登录后才能访问,登录后会创建一个会话变量,该变量在所有后续的页面访问中都会被检查,如果它不存在或不匹配与会话ID记录的内容,则会被踢出该页面。
此处为代码:
Application.cfm
会话设置:
<CFAPPLICATION NAME="myAPP" APPLICATIONTIMEOUT="#CREATETIMESPAN(0,0,60,0)#" sessionTimeout=#CreateTimeSpan(0, 0, 20, 0)# sessionManagement="Yes">
检查会话变量是否设置:
<CFLOCK TIMEOUT="30" THROWONTIMEOUT="no" TYPE="Exclusive" Scope="session">
<CFSET session.started = #ucase(dbGUID)#>
</CFLOCK>
现在页面每隔几秒钟会通过JQuery的load()方法从不同的后端页面加载数据到不同的DIV中。对于一些人来说,这一切都很好,没有任何问题,但是对于有些人来说,在几分钟到几个小时内它也许正常工作,然后突然Lucee将生成一个新的会话导致数据重新加载回主页,强制刷新主页以便您可以再次登录。然而,情况是这样的,页面刷新后,原始会话仍然存在,因此再次使用该会话,用户就能够再次查看页面数据。这对于某些人可能会发生很多次,而对于其他人则永远不会发生。
我相信这并非针对个人,因为在同一台PC上尝试是某些人没问题,而另外一些人却有问题。直接在Web服务器上(使用hosts文件将域名指向本地主机),没有遇到任何问题。它似乎不是负载均衡器的问题,因为它在负载均衡器上和不在负载均衡器上都会发生。 还要明确的是,它不是由特定的1个页面引起新会话的,它可以是任何正在使用的页面之一,并且它也不是由第一次尝试访问页面引起的,因为在生成新会话之前,它可能被访问数十次。它也不是超时,因为会话超时设置为20分钟,但是在原始会话被设置的一分钟内就可能发生。
问题是为什么Lucee突然决定创建一个新的会话(旧的仍然存在),我该如何阻止它或使其重新使用原始会话。
dbGUID
不匹配而拒绝会话时,你是否记录日志?这种情况是否发生? - Alex.load()
可能不使用相同的 cookie... 或者在服务器上显示为新套接字? - Twisty