每个请求的新会话

New session on every request

我对 ColdFusion 10 上的会话有疑问。我将网站从 CF 8 移到了 CF10。 CF8 驻留在不同的服务器中。我在 Application.cfc 的 onSessionStart 函数中放置了一个 WriteOutput(" testing") 以了解站点的行为方式。我 运行 该站点,在默认页面上出现 "testing" 输出。当我点击登录页面时,"testing" 字样再次出现。它调用 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。会话丢失问题已解决,但它带来了一个新问题 - 浏览器退出时会话未终止。

如果有人能提供一些想法,我将不胜感激。

在 CF Administrator 中启用 J2EE 会话(服务器设置 > 内存变量 > 使用 J2EE 会话变量)

如果您使用 ColdFusion 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 会自动结束会话并删除所有会话范围变量。会话不会在用户关闭浏览器时结束。

如果您使用 J2EE 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 将结束会话并删除所有会话范围变量。但是,浏览器会继续发送相同的会话 ID,只要浏览器保持活动状态,ColdFusion 就会将此 ID 重复用于与此浏览器实例的会话。

读这个http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7c48.html#WSc3ff6d0ea77859461172e0811cbec22c24-7d2d