每个请求的新会话
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。会话丢失问题已解决,但它带来了一个新问题 - 浏览器退出时会话未终止。
如果有人能提供一些想法,我将不胜感激。
- IIS 版本 = IIS 8.5
- OS版本=Win server 2012 R2
在 CF Administrator 中启用 J2EE 会话(服务器设置 > 内存变量 > 使用 J2EE 会话变量)
如果您使用 ColdFusion 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 会自动结束会话并删除所有会话范围变量。会话不会在用户关闭浏览器时结束。
如果您使用 J2EE 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 将结束会话并删除所有会话范围变量。但是,浏览器会继续发送相同的会话 ID,只要浏览器保持活动状态,ColdFusion 就会将此 ID 重复用于与此浏览器实例的会话。
我对 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。会话丢失问题已解决,但它带来了一个新问题 - 浏览器退出时会话未终止。
如果有人能提供一些想法,我将不胜感激。
- IIS 版本 = IIS 8.5
- OS版本=Win server 2012 R2
在 CF Administrator 中启用 J2EE 会话(服务器设置 > 内存变量 > 使用 J2EE 会话变量)
如果您使用 ColdFusion 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 会自动结束会话并删除所有会话范围变量。会话不会在用户关闭浏览器时结束。
如果您使用 J2EE 会话管理,如果客户端在会话超时期限内处于非活动状态,ColdFusion 将结束会话并删除所有会话范围变量。但是,浏览器会继续发送相同的会话 ID,只要浏览器保持活动状态,ColdFusion 就会将此 ID 重复用于与此浏览器实例的会话。