Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Coldfusion 2018群集和会话复制不工作_Session_Coldfusion_Coldfusion 2018 - Fatal编程技术网

Session Coldfusion 2018群集和会话复制不工作

Session Coldfusion 2018群集和会话复制不工作,session,coldfusion,coldfusion-2018,Session,Coldfusion,Coldfusion 2018,正在设置两台新的Coldfusion 2018服务器,并且将首次使用群集,但遇到了一些问题 我在会话复制方面遇到问题。基本上,会话变量似乎是在集群中的节点之间复制的,但是会在短时间内随机终止 一些设置信息: 负载平衡器后面有2台web服务器(Windows Server 2012) 每个web服务器上都有一个Coldfusion集群,由2个本地实例(仍不清楚这是否有用-将在单独的问题中询问)和2个远程实例(远程引用每个相反服务器的本地实例)组成 为了简单起见,目前只需使用本地Coldfusio

正在设置两台新的Coldfusion 2018服务器,并且将首次使用群集,但遇到了一些问题

我在会话复制方面遇到问题。基本上,会话变量似乎是在集群中的节点之间复制的,但是会在短时间内随机终止

一些设置信息:

  • 负载平衡器后面有2台web服务器(Windows Server 2012)
  • 每个web服务器上都有一个Coldfusion集群,由2个本地实例(仍不清楚这是否有用-将在单独的问题中询问)和2个远程实例(远程引用每个相反服务器的本地实例)组成
  • 为了简单起见,目前只需使用本地Coldfusion实例在单个服务器上进行测试—在我能够在本地可靠地工作之前,不必考虑远程
  • 使用J2EE会话变量
  • Coldfusion会话超时设置为2小时
  • 在每个Coldfusion实例中,channelSendOptions设置为“6”
以下是我的经历:

  • 我们有一个web应用程序,它需要登录并在登录时在会话中存储用户信息
  • 我对web应用程序做了一个小修改,以显示哪个群集实例为我当前的请求提供了服务
  • 设置集群后,我启动了web应用程序并登录,注意显示登录页面的实例
  • 登录后,我立即返回到登录屏幕(应用程序在会话中检查用户信息,如果找不到,则重定向到登录)
  • 调试显示我实际上正在登录,但在登录后重定向到某个新页面后,用户信息将从会话中消失
  • 连续多次登录尝试(相同的凭证,只是一次又一次地尝试)显示,有时登录会进行得很好,我会进入应用程序。但是,如果我刷新了页面或转到另一个页面,会话将很快丢失,但是随机的(在几次页面刷新中)
  • 为了简化问题,尝试找出发生了什么,我创建了一个简单的.cfm,它绕过所有登录内容,只做一件事:向会话添加一个简单的字符串值,然后转储会话和实例名称。 **我运行了一次脚本,注意到正在使用哪个实例,该会话包含我的值。 **然后我编辑了脚本,使其不再设置会话值。 **然后我反复点击刷新,以便确认:
  • 请求由集群中的两个实例提供服务
  • 当我在实例之间切换时,会话值始终可用
  • 同样,复制也可以工作,在几次刷新中,我可以在每个实例上看到可用的会话变量…直到它不可用为止。在随机刷新次数/秒后(比如2-10次刷新),该值将消失
我无法解释为什么会发生这种情况。我们考虑将Redis用作会话存储,看看它是否有帮助,但坦率地说,我们的团队没有使用它的经验,在Windows中工作很笨重,如果我们能够提供帮助的话,我们真的不希望在我们的基础设施中有更多的移动部件

如果您对正在发生的事情有任何了解,并就如何在幕后观察和了解会话复制的情况提供建议,我们将不胜感激

谢谢

添加一些代码和屏幕截图。屏幕截图显示每次页面刷新后的会话状态以及当前为页面提供服务的实例。最后两个图像代表刷新11和13-会话变量在11中丢失,我转到13,以便我们可以看到变量在另一个实例中也丢失了。还提供了一些群集/会话设置的图片

下面是简单的测试脚本。第一行在第一次运行时取消注释,以创建会话变量,并在后续每次运行时注释掉

<!--- <cfset Session.svar="cake!"> --->

<cfdump var="#Session#" />

<cfscript>
hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
</cfscript>

<cfoutput>
<h3>
Instance: #createobject("component","CFIDE.adminapi.runtime").getinstancename()#
</h3>
</cfoutput>

hostaddress=createObject(“java”,“java.net.InetAddress”).localhost.getHostAddress();
实例:#createobject(“组件”、“CFIDE.adminapi.runtime”).getinstancename()#


你有任何与此相关的代码或屏幕截图吗?嗨,詹姆斯,我补充了一些-希望这是你的想法。如果需要任何其他信息,请告诉我。好的,你解决过这个问题吗?我希望您转储传入的cookie(cgi.http_cookie,而不是cookie sipe,以查看“丢失会话”的请求中是否缺少jsessionid。这几乎总是真正的问题(而不是cf“丢失”它们)。然后问题将是为什么会发生这种情况,无论是由于您的web服务器、负载平衡器,或者甚至是来自客户端。或者cookie中的jsessionid是否与会话范围中的jsessionid不同?这将表明cf认为需要轮换会话。然后这将是一个值得探讨的问题。