2011-08-23 46 views
0

我面臨一個非常奇怪的問題,關於瀏覽器的cookie值。 我使用的是IE8,我想以這樣的方式管理會話,當任何新用戶嘗試連接我的應用程序時,以前的實例應該會自動關閉。自動cookie值越來越集

爲此,我爲每個用戶的登錄嘗試和遞增設置cookie。 現在,這種情況在IE6中完美工作,但在IE8中,我面臨的問題是: 當用戶第一次登錄時,cookie值設置爲ex 1.現在我打開另一個IE8窗口並使用cookie值2再次登錄。我轉到前一個實例,cookie值也更改爲2(應該爲1)。

因此,應用程序不應該發生多個實例運行。 另外,當我從1個實例註銷時,另一個會自動註銷。 無論如何我一次只需要一個實例。 (這種情況在不同的瀏覽器中是完美的,即FF和IE,即在IE/FF中打開第一個實例,在FF/IE中打開第二個實例)。

+0

你有兩個例子,即運行或只是1? – Woot4Moo

+0

我有2個IE運行的實例 – Ved

+0

同樣的事情也發生在FF的2個不同窗口。 – Ved

回答

2

原因是IE的兩個實例都將cookies寫入相同的位置(cookies只是硬盤上的文件)。雖然它可能看起來像您的Web應用程序的兩個不同客戶端,但從前端開始,當您從第二個窗口登錄時,Cookie將被保存爲覆蓋以前的Cookie。現在第一個實例只是看到新的cookie並將其快樂地發送到服務器。如果你只是去手動編輯cookie文件,也會發生同樣的情況。這不是一個錯誤 - 這是餅乾應該如何工作。請注意,如果您使用不同的計算機,您的預期行爲將顯示。

要防止來自同一臺計算機和同一應用程序的多個同時會話,可以使用其他技術。例如,在客戶端登錄時,散列登錄時間戳並將該散列保存在用戶帳戶中。然後將這個散列發送到每個頁面,並讓瀏覽器在請求新頁面時將該散列發回給您。在服務器上,將從客戶端接收到的哈希與存儲在用戶帳戶中的哈希進行比較。如果它們不匹配,那麼你在這個窗口中註銷應用程序,因爲顯然另一個窗口已經完成了另一個登錄。這將與同一應用程序的多個選項卡/窗口以及不同的窗口/計算機一起工作。我過去曾使用這種技術。當然,這不是完全萬無一失(沒有),但它在我需要的所有情況下都有效。

+0

非常感謝!我會嘗試你告訴...再次感謝有效的解決方案... – Ved

+0

@ Aleks G:你可以請提供一些示例代碼的事情,如何發送哈希值到客戶端,以及客戶端如何發送回服務器。我試圖以這樣的方式,當每個頁面加載時將該值設置爲隱藏字段並將該設置值發送到服務器以維持會話。但它不能正常工作。 – Ved

+0

@ adn295這幾乎是我這樣做的。除了我們將它傳遞給GET參數(next_page.php?hash = 12345678) –