0

私はColdFusion8とjQueryを使用しています。

多くのajaxを使用するページがあります。ページ上のボタンをクリックすると、一部のデータがCFCに送信され、データが取得されます。データの取得にはセッション変数が必要です。ページがしばらく使用されておらず、セッションが終了した場合、ページはエラーを作成します。ユーザーは必要なものをすべてクリックできますが、ajaxの舞台裏にあるため、エラーは表示されません。Firebugは、セッション変数がもう存在しないことを示しています。エラーは次のとおりです。

Element USERINFO.CATALOG_ID is undefined in SESSION.

CFCの上部で、次のようにAPPLICATIONスコープとSESSIONスコープからVARIABLESスコープに移動します。

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

セッションがまだアクティブであるかどうかをテストし、アクティブでない場合は、ページに何かを返して、それ自体を更新してこのセッションを再開するように指示する良い方法は何ですか?

4

2 に答える 2

2

私は実際に私たち自身のアプリケーションでこの問題に遭遇しました。私たちの問題では、セッションのタイムアウトのために欠落/空のREQUEST変数を処理していました。ユーザーはに送信しcfgrid、編集は誤った/欠落したデータで投稿します。

私の解決策は、存在を確認し、変数が適切に設定されているかどうかを確認することでした。どちらかが失敗した場合、私はfalse /失敗を返します。そうでない場合、通常の処理が続行され、true/成功を返します。

CFC方式の場合:

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

次に、メインページのコールバックハンドラーで、返されたtrue/falseを処理します。失敗した場合は、アラートメッセージをポップアップしてページをリロードします。これにより、ユーザーはログインページに自動的にリダイレクトされます。

var myCallBackHandler = function(r) {
    if (r==true) {
      // normal success processing
    } else {
      // update failed - usually due to timeout
      alert('Your session has timed out. The data was NOT saved. Please log in and try again.') ;
      location.reload(true) ;               
    }           
};
于 2013-01-08T21:35:39.340 に答える
1

セッションを開いたままにしておきたい場合は、非常に小さい(1ピクセル)iframeを使用します。iframeのページは、x秒ごとにメタリフレッシュを実行するだけで、セッションを維持します。

そうは言っても、セッションを存続させたいと思うことはめったにありません。彼らは理由のためにタイムアウトします。また、セッションがタイムアウトするのとほぼ同時にユーザーを別のページに誘導するjavasriptカウントダウンタイマーも組み込まれています。上記のシナリオでは、ボタンが表示されないため、ユーザーはボタンをクリックできません。

于 2013-01-08T22:39:32.000 に答える