Coldfusion 如果不是实时会话,如何测试实时会话变量并通过JavaScript刷新?

Coldfusion 如果不是实时会话,如何测试实时会话变量并通过JavaScript刷新?,coldfusion,coldfusion-8,Coldfusion,Coldfusion 8,我正在使用ColdFusion 8和jQuery 我有一个使用了大量ajax的页面。单击页面上的按钮时,一些数据被发送到CFC以检索数据。数据检索需要会话变量。如果页面有一段时间未使用,并且会话已结束,则该页面将创建一个错误。用户可以单击他想要的所有内容,但不会看到错误,因为它是ajax中的幕后操作。Firebug向我显示会话变量不再存在。以下是错误: Element USERINFO.CATALOG_ID is undefined in SESSION. 在CFC的顶部,我将内容从应用程序和

我正在使用ColdFusion 8和jQuery

我有一个使用了大量ajax的页面。单击页面上的按钮时,一些数据被发送到CFC以检索数据。数据检索需要会话变量。如果页面有一段时间未使用,并且会话已结束,则该页面将创建一个错误。用户可以单击他想要的所有内容,但不会看到错误,因为它是ajax中的幕后操作。Firebug向我显示会话变量不再存在。以下是错误:

Element USERINFO.CATALOG_ID is undefined in SESSION.
在CFC的顶部,我将内容从应用程序和会话范围移动到变量范围,如下所示:

<cfcomponent>

    <cfscript>
    // DEFAULT DATASOURCE
    VARIABLES.DS = APPLICATION.Datasource;
    // SET CATALOG AND MARKET
        VARIABLES.Catalog_ID = SESSION.UserInfo.Catalog_ID;
    VARIABLES.CatalogType = THIS.getCatalogType(VARIABLES.Catalog_ID);
    </cfscript>

    <cffunction name='SomeFunction>
    </cffunction>

<cfcomponent>

//默认数据源
VARIABLES.DS=APPLICATION.Datasource;
//设置目录和市场
VARIABLES.Catalog\u ID=SESSION.UserInfo.Catalog\u ID;
VARIABLES.CatalogType=THIS.getCatalogType(VARIABLES.Catalog\u ID);

实际上,我只是在我们自己的应用程序中遇到了这个问题。在我们的问题中,我们正在处理由于会话超时而丢失/空的请求变量。用户将提交到一个
cfgrid
,编辑内容将以不正确/缺失的数据发布

我的解决方案是检查变量的存在性和正确设置的变量。如果其中一个失败,我将返回false/failure,否则正常处理将继续,我将返回true/success

在CFC方法中:

<cfif NOT structkeyexists(session,"userid") OR len(trim(session.userid)) EQ 0>
  <cfreturn false>
</cfif>
<!--- normal processing --->
<cfreturn true>

实际上,我只是在我们自己的应用程序中遇到了这个问题。在我们的问题中,我们正在处理由于会话超时而丢失/空的请求变量。用户将提交到一个
cfgrid
,编辑内容将以不正确/缺失的数据发布

我的解决方案是检查变量的存在性和正确设置的变量。如果其中一个失败,我将返回false/failure,否则正常处理将继续,我将返回true/success

在CFC方法中:

<cfif NOT structkeyexists(session,"userid") OR len(trim(session.userid)) EQ 0>
  <cfreturn false>
</cfif>
<!--- normal processing --->
<cfreturn true>

如果我想保持会话打开,我使用非常小(1像素)的iframe。iframe中的页面只需每隔x秒进行一次元刷新,这将使会话保持活动状态


话虽如此,我很少想让一个会话保持活跃。他们暂停是有原因的。我们还集成了一个javasript倒计时器,它在会话超时的同时将用户引导到另一个页面。在上面描述的场景中,用户将无法单击按钮,因为它不在那里。

如果我想保持会话打开,我将使用非常小(1像素)的iframe。iframe中的页面只需每隔x秒进行一次元刷新,这将使会话保持活动状态


话虽如此,我很少想让一个会话保持活跃。他们暂停是有原因的。我们还集成了一个javasript倒计时器,它在会话超时的同时将用户引导到另一个页面。在上面描述的场景中,用户将无法单击按钮,因为它不在那里。

我过去处理这个问题的方法是在按键时触发一个事件,该事件每X分钟只调用一次(比会话超时时间短),然后我只调用“emptyPage.cfm”只要他们还在页面上输入/播放,就可以保持会话的活动状态。很有趣。。。但在这种情况下,它没有帮助。如果会话终止,然后用户单击一个按钮,我需要刷新浏览器。我过去处理会话超时的方式与@phantom42的建议类似。从AJAX调用返回一个错误,并为用户适当地处理它。我过去处理这个问题的方法是在keypress上触发一个事件,该事件每X分钟只调用一次(比会话超时时间短),然后我只调用“emptyPage.cfm”只要他们还在页面上输入/播放,就可以保持会话的活动状态。很有趣。。。但在这种情况下,它没有帮助。如果会话终止,然后用户单击一个按钮,我需要刷新浏览器。我过去处理会话超时的方式与@phantom42的建议类似。从AJAX调用返回一个错误,并为用户适当地处理它。