2012-03-14 93 views
2

我想避免打開兩個應用程序窗口(或標籤)的可能性。這是,如果我的應用程序(LAMP + Javascript)安裝在http://www.domain.com和用戶正在瀏覽頁面http://www.domain.com/user/他/她不能打開另一個窗口,如http://www.domain.com/system/。如果他/她打開另一個窗口,應用程序應顯示一條錯誤消息。如何避免打開兩個瀏覽器窗口?

這可能嗎?

對於好奇的人:我需要這種行爲,因爲我的應用程序使用一些會話數據來標識動作序列。如果用戶在同一個瀏覽器上打開一個新窗口,通常情況都是正確的,但是如果他/她開始一個新的序列,則前一個(在另一個窗口中)將會丟失。

回答

2

雖然所有其他人在此表示無法阻止某人打開您的網站兩次,但這可能是您的一種解決方法。請注意,這不是100%的解決方案,需要您根據此開發更多代碼。

據我知道你有以下問題:

  1. 如何確定用戶是否有你的頁面與共享會話數據(在Chrome即兩個選項卡,2個Chrome瀏覽器窗口的窗口/標籤打開等等) - 儘管這是最簡單的部分。
  2. 如何確定用戶是否在不同的瀏覽器中打開了您的頁面(即在同一時間在Chrome中打開FF &) - 這是一個棘手的問題。

但是 - 你可以使用LSO - Local Shared Objects做到這一點。這些是基於Flash的cookie類似的數據片段存儲在客戶端。他們是跨瀏覽器&跨域兼容。你可以找到一個名爲EVERCOOKIE的好圖書館,以便使用它們here

通過設置這樣一個cookie,你將能夠跟蹤用戶即使他打開了一個新窗口或即使他打開你的網頁在不同的瀏覽器,就瀏覽器共享相同的Flash安裝等

請注意,這不會阻止某人直接打開兩個窗口,但它使您能夠將其發送到與其他窗口中相同的序列狀態,例如。

您還應該意識到,這不是100%的解決方案。總會有一些技巧來解決這個問題,雖然我認爲普通用戶無法得到它...

2

不能阻止某人打開您的網站兩次。

你可能會能夠使用的每一頁新的會話密鑰,但可以得到一點手帕......

1

我能想到這樣做的唯一方法是隱藏/如果用戶刪除內容被記錄在其他地方

所以,你會一)需要用戶登錄...和b)記錄當用戶登錄...以及c)記錄在用戶註銷

還有這種方法的問題 - 你什麼時候決定何時關閉瀏覽器並且應該從「登錄」列表中刪除...

總之,答案是你不能可靠地停止這一點....

2

如上所述 - 你不能阻止某人打開你的網站兩次。但正如我所看到的,您的問題實際上是確保每個瀏覽器會話都是唯一的。有很多方法可以實現這一點,可以通過客戶端生成一個隨機數並通過ajax將其發送到後端來使用,而不是使用session-id,但您可能會遇到一些持久性問題,但這些都很容易應對。

0

我會在服務器端使用會話(即php),並利用load和window.unload事件來設置和銷燬會話。

如果一個會話已經創建,那麼之後打開的任何窗口都應檢查會話值,並在顯示錯誤消息後強制關閉。

相關問題