我能想到的唯一方法是爲每個頁面創建一個標識該頁面及其訪問時間的cookie,並且過期時間僅爲幾秒或幾分鐘(根據口味調整),並且負載爲您的網站(或頁面加載)檢查該cookie是否存在。
僞代碼:
if (cookie exists) {
Page already loaded in another tab/window.
}
else {
write cookie
}
Possiby你可以使用某種形式的會話ID的基礎上,一些非唯一。也許用戶的IP地址,用戶名和鹽?單獨使用IP地址的缺點是所有用戶都在同一個地址的路由器後面,將用戶名和用戶名聯繫起來的好處是每個用戶至少都是唯一的,鹽用於基本安全(可能並不是所有的對你來說很重要,但它似乎仍然是一種好習慣),並且防止用戶被鎖定,因爲他們在某處「打開了另一個窗口」。
如上所述,檢查會話ID是否存在,如果不存在,則創建它。
正如@Spender所指出的,在對您的問題和其他答案的評論中,任何實現此功能的解決方案都至少存在一個問題,即人們不能刷新頁面。短小的cookie時間至少可以緩解,但不會阻止用戶被激怒。
編輯:
要處理,需要進行頁面刷新,我想你可以使用onUnload
(或jQuery的.unload
)摧毀cookie的,所以,它的用戶留下刪除/刷新頁面。
運行onUnload
的js可以用來刪除會話變量,也可以通過Ajax或客戶端上的cookie刪除會話變量。
...其他瀏覽器呢? – 2010-04-14 23:48:41
「我想限制瀏覽器在任何給定的時間只打開一個頁面實例」這個比較尷尬和非直觀的行爲意味着要解決什麼問題?當然有更好的方法? – spender 2010-04-14 23:54:19
我同意spender,這似乎非常干擾。實際上,有很多人不明白標籤瀏覽的好壞,甚至不知道他們是否已經在同一頁面上打開另一個頁面:他們將要做什麼? – 2010-04-14 23:57:06