在ie8以上的的瀏覽器中,默認情況下,直接使用ie的快捷方式打個多個ie窗口,這些所有的窗口都會向服務(wù)器傳遞同一個cookie值,從而服務(wù)器會認為這些窗口的會話都是同一個會話,會引發(fā)一些意想不到的后果。
手動打開的兩個瀏覽器進程,訪問同一個頁面,發(fā)送/接收到的cookie是同一個值。這是瀏覽器本身所設(shè)計的,無法通過程序來更改。但是在客戶端可以通過以幾種方式設(shè)置后,讓不同的瀏覽器使用不同的會話:
1、 打開瀏覽器后,選擇文件菜單下的新建會話選項來打開一個新的瀏覽器窗口。 2、 對iexplore.exe添加一個快捷方式,在快捷方式后邊添加上啟動參數(shù)-nomerge,以后使用該快捷方式啟動瀏覽器: 3、 修改注冊表,在注冊表項HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下新加一個dword值TabProcGrowth=0,讓它 Loosely Couple
[plain] view plaincopy
附:Windows 7 研究——IE8 松散耦合進程框架探索(轉(zhuǎn)自:http://www./html/8972.html) 在2008年8月份IE8 Beta剛剛面世不久的時候,我曾經(jīng)用極短的篇幅介紹了一下IE8的新的Tab控制模型(詳情見:《IE8 新特性分析:IE8的穩(wěn)定性源自何處》 一文)。今天,我將繼續(xù)和大家分享一些最近一段時間獲得的新的知識。 IE8 松散耦合進程框架,英文原文是Loosely Coupled IE (LCIE),是一種基于作業(yè)(Job)的進程管理方式。這種方式已經(jīng)逐漸被各大瀏覽器所采用,例如Google Chrome。 下圖是IE8的LCIE框架結(jié)構(gòu): 作業(yè)是Windows 2000引入的一種進程管理方式,可以用一個宿主進程管理多個子進程。管理進程可以給子進程設(shè)置很多屬性,特別是一些和性能相關(guān)的屬性,具體可以參考SetInformationJobObject Function (Windows) 的API說明文檔。 當我們安裝完IE8以后,打開一個Tab,使用 Process Explorer 會發(fā)現(xiàn),有2個iexplore.exe實例,這個就是最典型的LCIE表現(xiàn):Tab工作在進程空間里面,有一個獨立的框架進程用于管理Tab進程。 如下圖所示,我打開了4個Tab,出現(xiàn)了4個Tab進程(進程ID分別為 9000、9672、6052、3056),框架進程的進程PID是7416: 因 為LCIE的模型決定了IE的框架和Tab是獨立的進程體,因此相互之間是需要通信的,根據(jù)Process Explorer的顯示,框架進程和Tab進程的通信是使用的ALPC(高級本地過程調(diào)用,在Windows內(nèi)核里面經(jīng)??梢砸姷?,效率很高)機制(在 Windows Vista上面),關(guān)于LPC的技術(shù)解釋,請Google搜索。 我們繼續(xù)研究LCIE的 標簽創(chuàng)建方式。當我們新開啟一個Tab以后,系統(tǒng)會創(chuàng)建一個iexplorer.exe進程用于和這個Tab綁定,那么我開啟10個Tab以后,是10個 進程嗎?實際的測試結(jié)果是:不一定。具體創(chuàng)建多少個Tab進程實際是由IE框架確定的,根據(jù)目前已知的結(jié)論,IE框架會根據(jù)可用的物理內(nèi)存大小確認最多創(chuàng) 建幾個Tab進程。
那么,是否有可能控制Tab進程的數(shù)量呢?答案是可以的。IE8 Frame在啟動的時候,會檢查注冊表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下面的TabProcGrowth鍵值(鍵值類型DWORD),利用這個鍵值,就可以操作IE8的Tab數(shù)量了。
關(guān)于IE8 LCIE的FAQ: 1、為什么不是每個Tab一個進程,而有一個上限呢? 因 為創(chuàng)建一個進程的開銷是遠遠大于創(chuàng)建一個線程的,創(chuàng)建一個進程,需要重新加載所有相關(guān)的模塊,而且進程間的切換也會帶來很大的性能損耗。IE8的LCIE 機制在達到Tab進程最多數(shù)目以后,后續(xù)的新開網(wǎng)頁將將采用負載平衡的機制讓不同的Tab進程進行處理,以達到資源的最大利用。 2、LCIE模型里面,會話是怎么處理的?我怎么感覺到不同的Tab都使用的是同一個會話呢? 的確,因此Tab進程的出現(xiàn),會話的處理是比較關(guān)注的一個點。在IE8里面,會話是和IE框架綁定的, 在這個IE框架下的所有Tab,共享同一個會話,具體來說就是:假設(shè)第一個Tab進程訪問了msdn.microsoft.com網(wǎng)站并屬于了Live ID登錄以后,后續(xù)新開的Tab進程如果也訪問了msdn.microsoft.com網(wǎng)站,那么是共享剛才的Live ID的,除非過期;而且,即使你從開始菜單里面點擊IE圖標,新創(chuàng)建的窗口也是使用先前的會話的。 3、在LCIE模型里面,如果讓不同的窗口使用不同的會話呢? 要在IE8里面,讓不同的窗口使用不同的會話,可以點擊文件菜單-->新建會話菜單項,使用這個方式,新創(chuàng)建的窗口將采用一個新的會話,以便和之前的會話區(qū)分開來。 4、為什么有時候IE8 Tab進程在訪問的頁面關(guān)閉以后,Tab進程還是存在呢? 這 是為了性能考慮的,防止用戶馬上又新開一個窗口,前面說過創(chuàng)建一個Tab進程是需要很多資源的。在默認情況下,IE8的Tab進程在網(wǎng)頁窗口關(guān)閉以后,將 駐留60秒時間,然后再退出。當然,我們也可以通過設(shè)置注冊表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的TabShutdownDelay DWORD鍵值來控制Tab進程的退出時間。注意:TabShutdownDelay的單位是毫秒(1秒等于1000毫秒)。
文末: IE8 相對于IE7來說,無論是進程框架和渲染引擎都得到了極大的改善和優(yōu)化,而且在各種標準支持方面都比IE7好了不少,雖然IE8不是最快的瀏覽器,也不是 應試分數(shù)最好的瀏覽器,但是無論是兼容性還是安全性方面,都是值得大家去安裝的。如果你是因為受不了IE7的慢而使用FireFox或Chrome瀏覽器 的,現(xiàn)在可以再體驗一下IE8,相信會比IE7有著明顯的改善的,呵呵。 |
|