2009-09-22 13 views
3

我有一個ASP.NET應用程序,使用狀態服務器會話模式與Cookieless設置爲false。在一些地方,有一個鏈接會彈出窗口到另一個應用程序(恰好位於同一個域中,但位於不同的虛擬目錄中)。下面的步驟之前給我的悲傷......經過幾個window.open調用我的ASP.NET會話超時

  1. 啓動彈出
  2. 關閉彈出
  3. 啓動彈出窗口相同的應用程序與一對夫婦不同的參數
  4. 關閉彈出
  5. 下一個請求=會話超時在「父」窗口中。

使用無cookie會話修復了這個問題,所以不知怎的,我的cookie被瀏覽器wh掉了。除了使用無Cookie會話之外,如何解決這個問題呢?對於它的價值,我正在開發/測試IE8。

編輯

看來,只有當彈出駐留在同一域中出現問題。如果我在其他地方彈出頁面,則沒有問題。

+0

什麼是您的會話超時設置爲?這是否會立即發生,無論它設置爲? – Bryan 2009-09-23 00:12:36

+0

它設置爲60分鐘,是的,無論我設置它的高/低有多高。 – 2009-09-23 13:06:53

+0

我們遇到了與IE8相同的問題,無法找到任何工作。您的測試案例是否可重複使用,因爲我們無法按需複製? – Schotime 2010-09-22 02:12:00

回答

1

是否有可能其他應用程序(在同一個域中)設置自己的Cookie,覆蓋您的主應用程序?你可以使用提琴手(或類似的工具)來查看哪些應用程序設置了哪些cookie?

0

檢查您是否不使用這些的話,那麼它可能是您的瀏覽器窗口都設置爲不共享之間的會話的情況下你

 
Session.Clear(); 
Session.Abandon(); 

所有實例。因此,新的實例獲得一個新的會話cookie(因爲其相同的cookie名稱作爲前一個,它可能殺死現有的會話cookie) - 在戲劇上: http://geekswithblogs.net/ranganh/archive/2009/04/17/asp.net-session-state-shared-between-ie-tabs-and-ie8.aspx

理想追查哪個頁面Set-Cookie標題即將出現。然後查看進入該響應的請求,並查看您當前的ASP.NET_SESSIONID Cookie是否已發送。 (提琴手的確是最好的工具) 無論如何 - 它是一個嘗試的開始。

+0

順便說一句 - 您可以在各種應用程序中爲您的Cookie設置一個不同的Cookie域,以便在確定哪個應用正在執行操作後防止重擊。請參閱http://forums.asp.net/t/1332808.aspx/1,除非您指定它,否則domain.com會將cookie發送到sub.domain.com – 2011-08-23 19:24:55

-1

編輯顯然,這不是你的cookie的名稱,所以...... 也許你應該有你的主網頁上的AJAX調用,關於你的web應用程序執行ping服務(或通用處理器),以保持會話活着。

的JavaScript

window.setInterval(function() { 
    $.get('ping.ashx?nocache=' + (new Date()).getTime(), function() { 
     return true; 
    }) 
}, 30000); 

在通用處理器,確保添加的IRequiresSessionState標記接口。

也許您的會話cookie名稱是相同的。

在您的web.config(對於其中一個應用程序)中更改會話cookie名稱。

<sessionState 
mode="StateServer" 
timeout="20" 
cookieName="DifferentASP.NET_SessionId"