每个请求的新会话

时间:2016-05-31 07:36:37

标签: coldfusion coldfusion-10

我在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。会话丢失问题已解决,但它给出了一个新问题 - 会话未在浏览器退出时终止。

如果有人能提出一些想法,我会非常感激。

  • IIS版本= IIS 8.5
  • 操作系统版本= Win server 2012 R2

1 个答案:

答案 0 :(得分:0)

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

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

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

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