我在ColdFusion 10上有会话问题。我将网站从CF 8移到了CF10。 CF8驻留在不同的服务器上。我在Application.cfc的WriteOutput(" testing")
函数中放了onSessionStart
来了解网站的行为方式。我在默认页面上运行了该站点,输出“testing”出现了。当我点击SignIn页面时,再次出现“测试”字样。它正在调用onSession的开始。这是我的onSessionStart中的内容。
<cfscript>
this.name="mysite";
this.clientmanagement=false;
this.sessionmanagement=true;
this.setclientcookies=false;
this.sessiontimeout="#CreateTimeSpan(0,0,40,0)#";//TODO: revert back to 40 mins as default
this.applicationtimeout="#CreateTimeSpan(0,1,0,0)#";
this.loginStorage = "Session";
this.logFile = "mysite_LOG";
this.scriptProtect = "all";
</cfscript>
<cffunction name="onSessionStart" returntype="void">
<cfif NOT StructKeyExists( cookie,"CFID" ) OR NOT StructKeyExists( cookie,"CFTOKEN" )>
<cfheader name="Set-Cookie" value="CFID=#session.CFID#; Expires=#GetHttpTimeString(DateAdd("yyyy", 40, Now()))#; Path=/;SECURE;HTTPOnly;">
<cfheader name="Set-Cookie" value="CFToken=#session.CFToken#; Expires=#GetHttpTimeString(DateAdd("yyyy", 40, Now()))#; Path=/;SECURE;HTTPOnly;">
</cfif>
<cfscript>
WriteOutput("testing");
StructClear(session);
session.pageRedirector = ""; //used for sending a user back to a previous requested page when authentication is required first
session.profile = CreateObject("component","mysite.cfcs.user");
session.shoppingCart = CreateObject("component","mysite.cfcs.cart");
session.catalog = CreateObject("component","mysite.cfcs.catalog");
</cfscript>
</cffunction>
我正在使用CSRFGenerateToken()
来验证页面,因此如果应用程序继续调用onSessionStart,则会始终清除会话并且用户无法登录。
将setClientCookies
设置为false会在每次请求时调用onSessionStart。
要解决此问题,我将setclientcookies
设置为true。会话丢失问题已解决,但它给出了一个新问题 - 会话未在浏览器退出时终止。
如果有人能提出一些想法,我会非常感激。
答案 0 :(得分:0)
在CF Administrator中启用J2EE会话(服务器设置&gt;内存变量&gt;使用J2EE会话变量)
如果您使用ColdFusion会话管理,如果客户端在会话超时期间处于非活动状态,ColdFusion会自动结束会话并删除所有会话范围变量。当用户关闭浏览器时,会话不会结束。
如果使用J2EE会话管理,如果客户端在会话超时期间处于非活动状态,ColdFusion将结束会话并删除所有会话范围变量。但是,只要浏览器保持活动状态,浏览器就会继续发送相同的会话ID,并且ColdFusion会将此ID重新用于与此浏览器实例的会话。