had*_*w64 8 coldfusion jquery tomcat cfml lucee
我有一个您登录的网页,然后创建一个会话变量,该变量在所有后续页面访问中检查,如果它不存在或与记录的会话ID不匹配,则会被踢出页面.
代码在这里:
Application.cfm会话设置:
<CFAPPLICATION NAME="myAPP" APPLICATIONTIMEOUT="#CREATETIMESPAN(0,0,60,0)#" sessionTimeout=#CreateTimeSpan(0, 0, 20, 0)# sessionManagement="Yes">
Run Code Online (Sandbox Code Playgroud)
检查会话变量集:
<CFLOCK TIMEOUT="30" THROWONTIMEOUT="no" TYPE="Exclusive" Scope="session">
<CFSET session.started = #ucase(dbGUID)#>
</CFLOCK>
Run Code Online (Sandbox Code Playgroud)
现在,该页面还通过JQuery的load()方法每隔几秒将数据加载到不同的DIV中,来自不同的后端页面.对于一些完全没有问题的人来说这一切都很好,但是有些人可以在几分钟到几个小时内完成任何工作,然后突然Lucee会生成一个新的会话,导致数据加载回主页面强制主页刷新,以便您可以重新登录.然而,发生的情况是页面刷新并且原始会话仍然实际存在,因此然后再次使用,然后该人员能够再次看到页面数据.对于某些人而言,这可能会发生很多次,而对于其他人则不会.
我确信这不是个人的,因为在同一个人的不同PC上尝试它对一些人来说是好的,而对其他人则没有.直接在Web服务器上尝试(带有指向本地的域的hosts文件),它没有问题.它似乎不是负载均衡器,因为它在负载均衡器上下都会发生.为了清楚起见,它不是导致新会话的1个特定页面,它可能是任何正在使用的页面,它也不是由于第一次尝试访问页面而导致的,因为它可能在访问之前被访问了几十次正在生成新会话.它也不是超时,因为会话超时设置为20分钟,但它可能在原始会话设置的一分钟内发生.
问题是为什么Lucee突然决定创建一个新会话(旧的会话仍然存在),我怎么能阻止它和/或让它再次使用原始会话返回.
您确定确实正在创建新会话吗?或者您可能假设因为session.started在某些确定登录状态的测试中不存在?
如果是这样,可能会有不同的解释。或者至少有一种更好的方法来知道是否像您想象的那样意外创建了新会话。
首先,请注意您正在执行 cflock,即exclusive, 和throwontimeout=no。后者通常是一种反模式:如果无法在规定时间内获得锁timeout,则不会抛出错误,但 cflock 内的代码将不会运行......因此不会session.started设置 。因此,任何测试其存在的代码都会认为它不存在——这也许是您假设正在创建新会话的原因。
如果您希望能够确定在这些情况下是否正在创建新会话,请输出session.sessionidvar(或会话范围的转储中显示的任何其他 lucee 生成的 var),以区别地标识该会话。当您感觉会话意外地重新创建时,该值是否会发生变化?
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |