4

我們正在升級從Windows XP的基於web的軟件與Internet Explorer 6到Windows 7的Internet Explorer 9打開一個新窗口中創建一個新的會話

此外,web瀏覽器對象使用WPF應用程序中。

我們現在有一個奇怪的行爲,當打開一個帶有URL的窗口(帶有類似window.open(url)的指令)時,ASP會話「丟失」並且新窗口與新的臨時會話一起工作。

我解決了這個問題,避免了無用的窗口打開,而是修改了當前窗口的位置。但我想明白爲什麼這種行爲!

你有什麼線索嗎?

謝謝。

+0

您可能需要手動設置用於ASP會話的Cookie。檢查你的cookies。 – buddhabrot

+0

您能否詳細說明「用URL打開窗口」?你的意思是在您的應用程序中打開一個新的應用程序窗口,其中包含Webbrowser控件?或者您的意思是您通過其他導航功能啓動了一個新的IE窗口? – AnthonyWJones

+0

這是一個測試,沒有運行任何IExplore.exe實例,試圖執行導航。 IExplore.exe的實例是否出現在進程列表中? – AnthonyWJones

回答

3

如果您在www.yoursite.com上運行,但窗口指向yoursite.com,則可能是由於您的域名存在一個簡單的差異而導致創建新會話。一個討厭的人應該注意這一點。

此外,您可能會在某個頁面中某處放置一些調試代碼,這可能會導致大量頭部劃傷,清除會話變量以進行測試。還有其他東西要檢查,但是你永遠不知道。

0

一些參考,以幫助您:

當您打開使用JavaScript作爲默認的IE一個新的窗口,創建一個新的窗口,以及不同一屆會議和歷史。如果您從javascript新窗口中獲取最後一個引用者,它將在主要瀏覽器中爲空。

而且你可以保持您的會話歷史,如果你的window.open功能被觸發錨對象中:

<script> 
function windowOpen() { window.open("my_page.asp","_blank"); }; 
</script> 
<a href="javascript:windowOpen();">my link</a> 
+1

IE行爲的描述非常令人懷疑。在標準的IExpore.exe進程窗口中,所有由javascript或html生成的新窗口將共享同一個會話級cookie存儲。創建全新會話的唯一方法是讓用戶通過文件菜單故意要求IE來完成。 – AnthonyWJones

+0

我沒有找到關於這種情況的文檔,但是我在過去做了一些測試,結果是當我使用觸發器在錨點之外的JavaScript中打開新窗口時,窗口打開時沒有歷史記錄,並且新會話。 Cookie在那裏,但這就是Cookie與URL相關的原因。您可以使用window.open從javascript中繞過瀏覽器引用檢查程序,因爲會話和歷史記錄在完成後會丟失。試試你的自我。 –

+0

也許你對「會話」的含義的理解不同於我所理解的含義。在這個問題的背景下,「會話」直接與會話cookie的維護(那些沒有持久化到磁盤的cookie)相關聯。我廣泛使用了各種各樣的方法來創建一個新窗口,而我從來沒有遇到過你所描述的內容,事實上恰恰相反。無法啓動不共享當前窗口的會話cookie存儲的新窗口。這裏真正的問題是,最初的主機進程不是iexplore.exe。 – AnthonyWJones

2

假設你的導航都去同一個域,那麼另一個原因,這可能是開關流程。從IE8開始,IE「chrome」和標籤內容分爲兩個進程。進一步的IE可以爲不同的窗口和標籤中的內容創建多個內容處理。

如果您的應用程序正在託管一個瀏覽器控件,然後啓動一個完整的IE窗口,那麼您的新URL可能會被另一個進程(iexpore.exe)請求而不是您的應用程序進程。因此,請求無法訪問會話cookie,因此會話顯示「丟失」。

(值得注意的是,在同一個進程樹中的多個iexplore.exe進程實例有相互共享會話cookie的方法)。

1

我想你可能會遇到與this answer地址相同的問題。實質上,這可能是由於您正在使用的特定計算機上的IE中的安全區錯誤。正如其他人已經注意到的,我可以重申,只要域沒有變化,會話就會被帶入其他IE瀏覽器(6,7,8,9)窗口中,並由javascript打開。

祝你好運!