2012-06-28 20 views
0

*請不要問我爲什麼這個代碼很多。我正在運行由其他人開發的網站。很多事情不是我會這樣做的,但它是目前完成的方式。先謝謝你。正在IE中刪除SESSION變量

我們有一個簡單的應用程序,允許用戶在我們學校搜索課程。一切工作都很好,但最近我們將服務器升級到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.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("[%[email protected]##$^&*()]", 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變量仍然存在,但位置丟失。在OnRequestStart函數中設置了很多SESSION變量,這導致我相信ALL SESSION變量正在丟失,然後在OnRequestStart調用中重置。

但是爲什麼IE只會在某些計算機上丟失這些變量。受影響的計算機似乎是在服務器升級之前訪問我們的應用程序的計算機,但仍有一些仍能正常工作。我工作的計算機在所有版本的IE中都很好。我嘗試清除IE中的所有緩存數據等,問題仍在繼續。

我今天在這裏得到一臺筆記本電腦,有問題,並希望能夠轉儲SESSION所有的地方,直到我發現他們迷失在哪一步,但它不能解釋爲什麼它只在運行IE的某些計算機上並非所有運行IE的計算機。它可能是一個操作系統問題?

+1

您是否檢查過以確保受影響的系統正在維護Cookie? CF依靠cookies是正確的,以便能夠選擇有關內存的正確會話信息。如果IE不維護cookie,無論出於何種原因,那麼用戶也將失去他們的會話。 –

+0

請參閱我們現在瞭解的正確描述問題的新問題。 [鏈接](stackoverflow.com/questions/11831487/1-of-users-get-new-session-id-on-each-page-request) – Leeish

回答

1

我們是作爲子域運行的。主域名還使用了Coldfusion,並使用了與我們的網站相沖突的網站範圍的Cookie。這引起了這個問題,並且自此得到解決。

+0

你是如何解決它的? –

+0

我相信ColdFusion可以選擇兩種不同的Cookie類型。我認爲我們只是開始使用其他類型,即J2EE會話變量。由於他們不是,餅乾是不同的。 – Leeish