2016-05-31 3 views
0

ColdFusion 10에서 세션 관련 문제가 있습니다. 사이트를 CF 8에서 CF10으로 이동했습니다. CF8은 다른 서버에있었습니다. 나는 WriteOutput(" testing")을 Application.cfc의 onSessionStart 기능에 넣어서 사이트가 어떻게 동작하는지 알게되었습니다. 기본 페이지에서 사이트를 실행하고 출력 "테스트"가 나타납니다. SignIn 페이지를 클릭하면 "testing"이라는 단어가 다시 나타납니다. 그것은 onSession을 시작하는 것입니다. 여기 내 onSessionStart에있는 것이 있습니다. 나는 응용 프로그램이 onSessionStart를 호출 계속해서, 그래서 만약 페이지를 확인하기 위해 CSRFGenerateToken()을 사용하고모든 요청시 새로운 세션

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

이 세션은 항상 삭제됩니다 사용자는 로그인 할 수 없습니다.

setClientCookies을 false로 설정하면 모든 요청에 ​​대해 onSessionStart가 호출됩니다.

문제를 해결하기 위해 setclientcookies을 true로 설정했습니다. 세션 손실 문제가 해결되었지만 브라우저 종료시 세션이 종료되지 않는 등 새로운 문제가 발생했습니다.

누구나 아이디어를 줄 수 있다면 정말 고맙겠습니다.

  • IIS 버전은 = IIS 8.5
  • OS 버전 = 승리 서버 2012 R2
+0

브라우저를 닫으면 세션이 종료되지 않습니다. ColdFusion은 브라우저가 닫혔는지 또는 단순히 페이지를 읽는 데 오랜 시간이 걸리거나 단순히 컴퓨터에서 벗어난 경우 알 수있는 방법이 없습니다. Pankaj가 지적했듯이, J2EE 세션 변수를 사용하면 브라우저 (브라우저 창뿐만 아니라 탭)를 다시 열면 새로운 세션이 생성되지만 이전 세션은 시간이 초과 될 때까지 계속 존재합니다. –

답변

0

CF 관리자에서 J2EE 세션 (서버 설정> 메모리 변수>를 사용하여 J2EE 세션 변수)를 사용

입니다 ColdFusion 세션 관리를 사용하는 경우 ColdFusion은 자동으로 세션을 종료하고 클라이언트가 세션 시간 초과 기간 동안 비활성 상태 인 경우 모든 세션 범위 변수를 삭제합니다. 사용자가 브라우저를 닫을 때 세션이 종료되지 않습니다.

J2EE 세션 관리를 사용하는 경우 ColdFusion은 세션 시간 종료 기간 동안 클라이언트가 비활성 상태 인 경우 세션을 종료하고 모든 세션 범위 변수를 삭제합니다. 그러나 브라우저는 동일한 세션 ID를 계속 전송하며 브라우저가 활성 상태 인 동안 ColdFusion은이 브라우저 인스턴스와의 세션에 대해이 ID를 재사용합니다.

읽어보기 http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7c48.html#WSc3ff6d0ea77859461172e0811cbec22c24-7d2d

관련 문제