2010-09-14 43 views
4

我試圖找到解決這個問題:我有不能被打開一次以上,以避免會議重寫PHP應用程序的頁面。 我花了很多時間沒有找到任何解決方案!避免打開同一個頁面兩次

最後一個我想是使用窗口上的jQuery的「加載」和「卸載」事件。如果我在新窗口或新選項卡中打開相同的頁面,但它也會在我刷新頁面時阻止該頁面!

我真的不知道怎麼下去!我認爲這是一個信號量使用的簡單例子......但我無法用正確的方式對其進行編碼。

有什麼建議嗎? (PHP和JS的解決方案,歡迎)

+0

我們可以在PHP中看到你的嘗試,併爲你的jQuery嘗試javascript。 – RobertPitt 2010-09-14 22:03:22

+0

根據Jquery手冊,頁面刷新首先觸發'unload':http://api.jquery.com/unload/,以便在刷新時刪除信號量。看到代碼會更好,根據@RobertPitt – Fanis 2010-09-14 22:12:43

回答

0

不能由同一用戶打開不止一次,我相信。

你是如何使用jQuery的裝載和卸載的事件?在這裏集思廣益,如何使用load在用戶的會話中設置一個信號量,該信號量將由unload刪除。當然,我不確定即使瀏覽器崩潰或類似的未解決的技術問題,該事件是否也會引發火災。在這種情況下,你可能會遇到一個困難的問題,那就是你需要一個特定的超時時間,或者等待會話超時。

要解決,也許以後在頁面加載有執行每10秒,基本上更新旗語有點像一個計時器「的頁面仍然是開放的」,與當前的時間戳。如果加載時信號量存在,但時間戳超過10秒,則用戶正在刷新。

0

的問題是,你沒有獲得最終用戶的網頁當前在瀏覽器中打開。所以唯一的解決方案是讓你跟蹤用戶打開/關閉/切換到另一個頁面等的頁面。即使這並不完美,因爲用戶可以打開另一個瀏覽器進程。所以沒有完美的解決方案。

1

你可以用一個cookie嘗試:下一次在同一個頁面加載

  1. 第一頁加載,設置cookie(由服務器會話)
  2. ,它讀取cookie
  3. 如果cookie是存在的,不覆蓋會話變量

我不認爲瀏覽器將能夠使刷新,而在另一個標籤/窗口負載之間的差異。

+0

或者如果使用HTML5,你可以使用HTML5的客戶端網絡存儲,而不是cookies :) – Joset 2010-09-14 22:30:29

0

對不起,你們......你是對的! 代碼位將幫助我們所有的人:) 想我的腳本在運行script.php的HTML的script.php

我把

$(window).bind('load', 
function(){ 
    $.post(PATHTOLOCK.php); 
}); 
$(window).bind('unload', 
function(){ 
    $.post(PATHTOUNLOCK.php); 
}); 

在文件PATHTOLOCK.php我這樣做:

$_SESSION['flag']=true; 

,並在文件PATHTOUNLOCK.php我這樣做:

$_SESSION['flag']=false; 

在腳本的開頭。php我把

if($_SESSION['flag']==true){ 
echo "error";exit; 
} 

如果我在兩個窗口/標籤打開script.php一切工作正常。如果我刷新頁面它不工作,因爲我想的事件順序如下:上刷新

  • 點擊
  • 卸載事件不會被調用,因爲頁面沒有完全離開
  • 腳本。因爲標誌=真
  • script.php的推移錯誤PHP是重裝
  • 檢查時的script.php年初失敗
  • 因爲該網頁左側和標誌卸載事件被調用=假
  • 點擊刷新
  • 現在它工作!

等等...每兩次刷新它的作品!

+0

@mic我認爲這是行不通的。刷新是問題。 – tom 2010-09-14 22:39:03

+0

@OTZ我也這麼想!但我如何保持頁面的軌跡?特別是封閉的頁面!再次,我如何區分一個已關閉的頁面和已刷新的頁面? – tom 2010-09-14 22:41:14

+0

你能更好地解釋你在這裏的實際情況嗎?讓我看看,如果我明白,但...用戶來到Chrome的標籤script.php。您不希望用戶能夠在Chrome的第二個選項卡中加載script.php,是否正確?但同時,您希望用戶能夠刷新頁面?另外,這是出於可用性問題還是安全問題? – BBonifield 2010-09-15 18:50:49