0

*このコードの多くについて理由を尋ねないでください。他の人が開発したサイトを運営しています。その多くは私がやりたい方法ではありませんが、それが現在行われている方法です。よろしくお願いします。

ユーザーが私たちの学校のコースを検索できるシンプルなアプリケーションがあります。アプリはすべて問題なく動作していますが、最近、サーバーを IIS 7 と Coldfusion 10 にアップグレードしました。それ以来、Internet Explorer を使用する一部のユーザーはアプリケーションを動作させることができませんが、問題は 100% 広まっているわけではありません。実際、非常に散発的です。プロセス中に設定されていない単一のセッション変数 [SESSION.location] に絞り込みましたが、どこにあるのかわかりません。以下に関連するコードを投稿してみます。

この変数をいじる Application.CFC には何もありません。フォーム送信を処理する共通ヘッダーがあります。

<cftry>
        <cfset the_message = (structKeyExists(REQUEST, 'message')) ? REQUEST.message : (isDefined('submitFrmData')) ? submitFrmData() : ''>
        <cfif Len(Trim(the_message)) NEQ 0><div id="message">#the_message#</div></cfif>
    <cfcatch>#createObject('component','common.err_handler').pageErrHandler(CFCATCH)#</cfcatch>
    </cftry>

コースを検索するためのフォームが表示されているページで、SESSION をダンプすると、設定されている SESSION.location が表示されます。フォームのアクションは、上部に次のような search_results.cfm ページに送信されます。

public string function submitFrmData() {
    //Every time page loads.
    dal = CreateObject('component','cfcs.dal');
    if(structKeyExists(FORM, 'search_courses')){
        if (len(FORM.coursefinder_search) > 2 && arrayLen(REMatch("[%!@##$^&*()]", FORM.coursefinder_search)) < 1) { 
            if(structKeyExists(session, "location") && structKeyExists(session, "semester_id")){
                location('search_results.cfm?fsrch=' & APPLICATION.cFun.structToEncryptedString(FORM) & '&sem_id=#SESSION.semester_id#&loc_id=#SESSION.location#',false);
            } else {
                location("index.cfm", false);
            }
        } else if(structKeyExists(FORM, 'dept_id')){    
            if(structKeyExists(session, "location") && structKeyExists(session, "semester_id")){
                location('search_results.cfm?srch='& APPLICATION.cFun.structToEncryptedString(FORM) & '&sem_id=#SESSION.semester_id#&loc_id=#SESSION.location#',false);
            } else {
                location("index.cfm", false);
            }
        } else {
            location ("index.cfm", false);
        }
    }
    if(structKeyExists(URL, 'srch')){
        srch_result = dal.CrsSearch(APPLICATION.cFun.encStringToStruct(URL.srch));
        realResults = new query(dbtype="query", QoQsrcTable=srch_result, sql="SELECT DISTINCT COURSEID, sectioncode FROM QoQsrcTable").execute().getResult();
        numCoursesFound = (len(trim(realResults.courseid)) NEQ 0) ? realResults.recordCount : 0;
    }
    if(structKeyExists(URL, 'fsrch')){
        srch = APPLICATION.cFun.encStringToStruct(URL.fsrch);
        if(!structKeyExists(srch,'coursefinder_search')){
            location ("index.cfm", false);
        }
        srch_result = dal.CrsFreeSearch(srch.COURSEFINDER_SEARCH);
        realResults = new query(dbtype="query", QoQsrcTable=srch_result, sql="SELECT DISTINCT COURSEID, sectioncode FROM QoQsrcTable").execute().getResult();
        numCoursesFound = (len(trim(realResults.courseid)) NEQ 0) ? realResults.recordCount : 0;
    }

    return '';
}

だから私にはこれは奇妙ですが、これが起こることです. FORM は、ヘッダーが呼び出される前に submitFrmData 関数が定義されている結果ページに送信されます。ヘッダーが呼び出され、submitFrmData 関数が実行されます。その関数に入ると、SESSION をダンプし、SESSION.location が失われます。他の SESSION 変数は残りますが、場所は失われます。多くの SESSION 変数が OnRequestStart 関数に設定されているため、すべての SESSION 変数が失われ、OnRequestStart 呼び出しでリセットされると思われます。

しかし、IE が一部のコンピューターでのみこれらの変数を失うのはなぜでしょうか。影響を受けるコンピューターは、サーバーのアップグレード前にアプリケーションにアクセスしたもののようですが、一部はまだ正常に動作しています。私が使用しているコンピューターは、IE のすべてのバージョンで問題ありません。IEですべてのキャッシュデータなどをクリアしようとしましたが、問題はまだ続いています。

私は今日、問題のあるラップトップをここに持ってきており、うまくいけば、どのステップで迷子になるかが正確にわかるまで、SESSIONをあちこちにダンプできると思いますが、実行中の一部のコンピューターでのみ発生する理由は説明されていませんIE IE を実行しているすべてのコンピューターではありません。OSの問題でしょうか?

4

1 に答える 1

1

サブドメインとして実行していました。メイン ドメインも Coldfusion を使用し、サイト全体の Cookie を使用していたため、私たちとの競合が発生しました。これにより問題が発生し、その後解決されました。

于 2013-01-17T02:27:42.843 に答える