2009-11-13 69 views
1

我有ASP.Net應用程序在IE 7.0中完美運行,但由於在IE 8.0會話共享(也在新窗口的情況下),應用程序給予意想不到的行爲會話可以被其他窗口修改。IE8會話共享問題在ASP .Net應用程序

一些快速的事實

我知道-nocache選項,並開放新的會話文件8

我只是想知道,IE瀏覽器的菜單項沒有任何選項來禁用在新窗口中這個會話共享行爲通過ASP Net代碼(通過獲取瀏覽器),或者任何其他解決方案

我也想有你的未來的Web應用程序開發的建議,我們需要什麼照顧,以避免會話共享問題

回答

1

會話共享對於Internet Explorer 8來說並不是唯一的。在任何瀏覽器(IE5,6,7 FF1,2,3 OP6,7,8,9,10等)中的新選項卡,Ctrl-N共享全球進程的會話數據。它剛剛收到一個奇特的名字,因爲現在標籤可以在計算機上有多個進程(不是新的),但仍會「共享」會話。這就是「新」。

令人高興的是,你意識到這一點,但如果你想利用這個「經驗」或「功能」遠離用戶,它不是那麼好。如果你想這樣做,我會檢查到JScript/JavaScript解決方案,並在用戶試圖打開幾個會話時發出警告,但我懷疑你會得到一個很好的「禁止跨窗口共享會話」解決方案。即使是著名的銀行已經對這個放棄(他們從來不喜歡這個會話共享的東西)

從設計的角度來看:在服務器端,這是相當簡單的。只是總是假定會話被改變了。例如,這可能意味着在一個屏幕上,用戶沒有登錄,而在另一個屏幕上。沒關係。如果他刷新或轉到其他頁面,則會向他顯示正確的視圖:已登錄的用戶訪問同一頁面。

只要確保你檢查無效數據,在另一個窗口(即,請求)改變的會議的結果。但這是一個普遍的建議:在你接受的內容中保持自由,但要確保你確認任何輸入。

編輯:在額外的會議:只要對待他們就是這樣。用戶一直有可能爲同一用戶打開多個會話(兩個不同的瀏覽器)。正如它始終可以通過同一瀏覽器的另一個選項卡,窗口等來更改會話一樣。


在「解決」方面:將會話配置爲無Cookie。這將會話置於URL查詢參數中。任何在URL中沒有SESSIONID的舊窗口都不會被視爲會話的一部分。然而,警告到位:這種做法最終會導致更多的麻煩,然後它解決了(即現在你不用擔心與沒有來自同一用戶,同一瀏覽器,同一個IP 它仍然可能會話請求「通過複製URL或標籤複製「會話)。

+0

只要確保您檢查失效的數據,作爲另一個窗口(即請求)中更改的會話的結果。但這是一個普遍的建議:在你接受的內容中保持自由,但要確保你確認任何輸入。 你可以通過舉例說明嗎?通過驗證你的意思,如果在另一個窗口中更改會話,我們可以限制操作...... – Harryboy 2009-11-13 12:40:09

+0

我很難想出一個可以真正搞砸的例子(只要你說的是:驗證輸入和我說的,你總是假設變化)。您是否正在尋找可能出錯的情況,或者您是否正在尋找解決當前錯誤情況的方法? – Abel 2009-11-13 20:24:23

0

移動你的一些信息,從會議到ViewState中可以幫助您解決您所遇到的問題

+0

會話是服務器端,viewstate是客戶端。好的建議,但是當你的會話包含敏感數據時要小心。 – Abel 2009-11-13 11:57:52

+0

首先我不能改變我現有的代碼,因爲它意味着我的成本很高,第二,如果我設計一個新的應用程序在這種情況下,如果有任何重物我不能存儲在視圖狀態 – Harryboy 2009-11-13 12:31:50