2016-05-31 20 views
0

Ich habe ein Problem mit Sitzungen auf ColdFusion 10. Ich habe eine Site von CF 8 nach CF10 verschoben. CF8 befand sich auf einem anderen Server. Ich habe eine WriteOutput(" testing") in der onSessionStart Funktion der Application.cfc, um zu wissen, wie sich die Site verhalten wird. Ich habe die Seite auf der Standardseite ausgeführt und die Ausgabe "Testen" erschien. Als ich auf die SignIn-Seite geklickt habe, erschien das "Test" -Wort erneut. Es ruft den onSession-Start auf. Hier ist, was in meinem onSessionStart ist.Neue Sitzung bei jeder Anfrage

<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> 

I CSRFGenerateToken() bin mit der Seite, um zu überprüfen, so dass, wenn die Anwendung der onSessionStart beim Aufruf hält, wird die Sitzung immer gelöscht werden, und der Benutzer war einzuloggen nicht in der Lage.

Einstellung setClientCookies auf falsche Aufrufe onSessionStart bei jeder Anfrage. Um das Problem zu beheben, setze ich setclientcookies auf True. Das Sitzungsverlustproblem wurde gelöst, aber es gab ein neues Problem - die Sitzung wurde beim Beenden des Browsers nicht beendet.

Wenn jemand einige Ideen geben kann, würde ich es sehr schätzen.

  • IIS-Version = IIS 8.5
  • OS version = Win Server 2012 R2
+0

den Browser schließen, wird nicht eine Sitzung beenden. ColdFusion kann nicht feststellen, ob der Browser geschlossen wurde oder ob Sie nur sehr lange brauchen, um die Seite zu lesen, oder ob Sie einfach von Ihrem Computer weggegangen sind. Wie Pankaj sagte, erhalten Sie mit J2EE-Sitzungsvariablen eine neue Sitzung, wenn Sie den Browser erneut öffnen (Browserfenster, nicht nur eine Registerkarte), aber die alte Sitzung wird weiterhin bestehen bleiben, bis das Zeitlimit überschritten wird. –

Antwort

0

aktivieren J2EE-Sitzungen in CF Administrator (Servereinstellungen> Speichervariablen> Verwendung J2EE Session-Variablen)

Wenn Sie die ColdFusion-Sitzungsverwaltung verwenden, beendet ColdFusion automatisch Sitzungen und löscht alle Variablen des Sitzungsbereichs, wenn der Client für das Sitzungs-Timeout inaktiv ist. Die Sitzung endet nicht, wenn der Benutzer den Browser schließt.

Wenn Sie die J2EE-Sitzungsverwaltung verwenden, beendet ColdFusion die Sitzung und löscht alle Variablen des Sitzungsbereichs, wenn der Client für das Sitzungs-Timeout inaktiv ist. Der Browser sendet jedoch weiterhin dieselbe Sitzungs-ID, und ColdFusion verwendet diese ID für Sitzungen mit dieser Browser-Instanz erneut, solange der Browser aktiv bleibt.

Lesen Sie dieses http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7c48.html#WSc3ff6d0ea77859461172e0811cbec22c24-7d2d