*このコードの多くについて理由を尋ねないでください。他の人が開発したサイトを運営しています。その多くは私がやりたい方法ではありませんが、それが現在行われている方法です。よろしくお願いします。
ユーザーが私たちの学校のコースを検索できるシンプルなアプリケーションがあります。アプリはすべて問題なく動作していますが、最近、サーバーを 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の問題でしょうか?