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