我正在运行Lucee 5.1.3.18/Tomcat/centOS/mySql(3个物理,6个虚拟),我的会话丢失不稳定。我已经查看并验证了这样做的代码不是很糟糕。情况是用户将项目添加到购物车(所有项目都在session_id上加入)。他们在结帐页面上填写付款信息,信用卡等。通常,如果您等待3到5分钟并提交到审核,则会抛出错误,而不会看到这些项目(session_id已更改)。时间范围有所不同,但通常约为5分钟。
当Lucee admin设置为使用我的数据源并在数据库中存储会话信息时,会发生这种情况。
的Application.cfc:
<cfset THIS.Name = "sessionName" />
<cfset THIS.SessionManagement = true />
<cfset THIS.ClientManagement = true />
<cfset THIS.ApplicationTimeout = CreateTimeSpan(0,12,0,0) />
<cfset THIS.SessionTimeout = CreateTimeSpan(0,4,0,0) />
<cfset THIS.SetClientCookies = true />
<cfset THIS.SetDomainCookies = false />
<cfset THIS.ScriptProtect = true />
<cfset THIS.sessionType = "jee">
<cfset THIS.sessionStorage = "myDatasource">
<cfset THIS.sessionCluster = true>
更改
<cfset THIS.sessionType = "jee">
到cfml,也有同样的问题(试过EHcache没有成功)。
如果我切换到使用&#34; Memory&#34;并且消除DB,我的问题仍然少得多。使用&#34;记忆&#34;也使堆膨胀,最终服务器锁定。
日志不会显示任何有用的信息,但我不时会看到管道错误和数据库连接丢失。我考虑到服务器锁定了。
我没有试图提出一个开放式问题,但您对遇到的可能问题有任何建议吗?是否有一些我可能忽略的模糊Lucee特定设置?任何帮助都是值得赞赏的。
谢谢, 亨利
答案 0 :(得分:0)
你可以看看你的代码中是否可以找到下面这些调用中的任何一个,因为它们可能会提前结束你的会话。
sessionInvalidate会终止会话(我不太确定它是立即还是在调用它的请求完成之后)并且setMaxInactiveInterval调用会覆盖application.cfc中使用的会话超时。
<cfscript>
getPageContext().getSession().setMaxInactiveInterval(javaCast("int", 60));
sessionInvalidate();
</cfscript>